Вариант 15

Описать структуру с именем ZNAK, содержащую следующие поля:

  • фамилия, имя;
  • знак Зодиака;
  • дата рождения (массив из трех чисел).

Написать программу, выполняющую следующие действия:

  1. ввод с клавиатуры данных в массив, состоящий из восьми элементов типа ZNAK, записи должны быть упорядочены по датам рождения;
  2. вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
  3. если такого нет, выдать на дисплей соответствующее сообщение.

Код программы:

//---------------------------------------------------------------------------
#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.

Результат работы программы:

Результат работы. Пятнадцатый вариант. Структуры

Вариант 14
Вариант 16
error: Content is protected !!