Описать структуру с именем ZNAK, содержащую следующие поля:
- фамилия, имя;
- знак Зодиака;
- дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK, записи должны быть упорядочены по датам рождения;
- вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
- если такого нет, выдать на дисплей соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<windows.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text);//функция для распознавания русских символов int main(int argc, char* argv[]) { const int m=3,k=30; //объявление именованных констант struct Znak //объявление структуры { char fio[k]; //объявление char znak[k]; //полей int bdate[m]; //структуры }; int i,j,n; //объявление bool not_found,sort=1; char surname[k]; //переменных cout<<rus(" Введите количество структур ZNAK: ");cin>>n;//ввод кол-ва структур cout<<endl; Znak temp; Znak *ZNAK=new Znak[n];//выделение в динамической памяти место под массив структур for(i=0;i<n;i++) { cout<<' '<<(i+1)<<rus(".Введите фамилию и имя: "); cin.ignore();cin.getline(ZNAK[i].fio,k); //ввод cout<<rus(" Введите знак зодиака: ");cin>>ZNAK[i].znak; //данных for(j=0;j<m;j++) { cout<<rus(" Введите день рождения: ");cin>>ZNAK[i].bdate[j++]; cout<<rus(" Введите месяц рождения: ");cin>>ZNAK[i].bdate[j++]; cout<<rus(" Введите год рождения: "); cin>>ZNAK[i].bdate[j]; } cout<<endl; } while(sort) { //сортировка sort=0; //структуры for(i=0;i<n-1;i++) //по { if(ZNAK[i].bdate[2]>ZNAK[i+1].bdate[2]) //датам { //рождения temp=ZNAK[i]; ZNAK[i]=ZNAK[i+1]; ZNAK[i+1]=temp; sort=1; } if((ZNAK[i].bdate[2]==ZNAK[i+1].bdate[2])&&\ (ZNAK[i].bdate[1]>ZNAK[i+1].bdate[1])) { temp=ZNAK[i]; ZNAK[i]=ZNAK[i+1]; ZNAK[i+1]=temp; sort=1; } if((ZNAK[i].bdate[2]==ZNAK[i+1].bdate[2])&&\ (ZNAK[i].bdate[1]==ZNAK[i+1].bdate[1])&&\ (ZNAK[i].bdate[0]>ZNAK[i+1].bdate[0])) { temp=ZNAK[i]; ZNAK[i]=ZNAK[i+1]; ZNAK[i+1]=temp; sort=1; } } } cout<<rus(" Записи упорядоченные по датам рождения:\n\n"); for(i=0;i<n;i++) { //вывод отсортированной структуры cout<<rus(" Фамилия и имя: ")<<ZNAK[i].fio<<endl; cout<<rus(" Знак Зодиака: ")<<ZNAK[i].znak<<endl; cout<<rus(" Дата рождения:"); for(j=0;j<m;j++) { cout<<ZNAK[i].bdate[j]<<'.'; } cout<<endl<<endl; } cout<<rus("\n Информации о человеке, чья фамилия введена с клавиатуры:")<<endl; while(true) { cout<<rus(" Введите фамилию или ""\"end\" для окончания: ");cin>>surname; cout<<endl; if(strcmp(surname,"end")==0)break; not_found=true; //поиск for(i=0;i<n;i++) //введенной { //фамилии if(strstr(ZNAK[i].fio,surname)) //в структуре if(ZNAK[i].fio[strlen(surname)]==' '||ZNAK[i].fio[strlen(surname)]=='\0') { cout<<rus(" Фамилия и имя: ")<<ZNAK[i].fio<<endl; cout<<rus(" Знак Зодиака: ")<<ZNAK[i].znak<<endl; cout<<rus(" Дата рождения:"); //вывод for(j=0;j<m;j++) //запрошенной { //информации cout<<ZNAK[i].bdate[j]<<'.'; } not_found=false; cout<<endl<<endl; } } //если нет такой информации выводится сообщение if(not_found)cout<<rus(" Таких людей нет!")<<endl<<endl; } getch(); return 0; } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text,bufrus); return bufrus; } //---------------------------------------------------------------------------
Для уменьшения количества выводимой на экран информации, заполним только 2 структуры ZNAK.
Результат работы программы: