Описать структуру с именем ZNAK, содержащую следующие поля:
- фамилия, имя;
- знак Зодиака;
- дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK, записи должны быть упорядочены по знакам Зодиака;
- вывод на экран информации о людях, родившихся в месяц, значение которого введено с клавиатуры;
- если таких нет, выдать на дисплей соответствующее сообщение.
Код программы:
//--------------------------------------------------------------------------- #include<iostream.h> #include<conio.h> #include<stdlib.h> #include<windows.h> #include<vcl.h> #pragma hdrstop #pragma argsused //--------------------------------------------------------------------------- char *rus(const char *text);//функция для распознавания русских символов int compare(const void *znak1,const void *znak2);//объявление функции для сортировки const int m=3,k=30;//объявление именованных констант struct Znak //объявление структуры { char fio[k]; //объявление char znak[k]; //полей int bdate[m]; //структуры }; //--------------------------------------------------------------------------- int main(int argc, char* argv[]) { int i,j,n,month=0; //объявление bool not_found; //переменных cout<<rus(" Введите количество структур ZNAK: ");cin>>n;//ввод кол-ва структур cout<<endl; 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; } qsort(ZNAK,n,sizeof(Znak),compare); //вызов функции для сортировки 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(" Введите месяц рождения или 0 для окончания: ");cin>>month; cout<<endl; if(0==month)break; else { not_found=true; for(i=0;i<n;i++) { if(ZNAK[i].date[1]==month) { 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; } //--------------------------------------------------------------------------- int compare(const void *znak1,const void *znak2)//функция для сортировки { return strcmp((reinterpret_cast<const Znak*>(znak1))->znak, (reinterpret_cast<const Znak*>(znak2))->znak); } //--------------------------------------------------------------------------- char bufrus[256]; char *rus(const char *text) { CharToOem(text,bufrus); return bufrus; } //---------------------------------------------------------------------------
Для уменьшения количества выводимой на экран информации, заполним только 2 структуры ZNAK.
Результат работы программы: