Вариант 14

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

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

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

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

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

//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<windows.h>
#include<math.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 Note        //объявление структуры
   {
    char fio[k];      //объявление
    int telnumb;          //полей
    int bdate[m];        //структуры
    int tel3numb;
   };
  int i,j,n;         //объявление
  bool not_found,sort=1;
  char surname[k];          //переменных
  cout<<rus(" Введите количество структур NOTE: ");cin>>n;//ввод кол-ва структур
  cout<<endl;
  Note *NOTE=new Note[n];//выделение в динамической памяти место под массив структур
  for(i=0;i<n;i++)
   {
    cout<<' '<<(i+1)<<rus(".Введите фамилию и имя: ");
    cin.ignore();cin.getline(NOTE[i].fio,k);                                         //ввод
    cout<<rus("   Введите номер телефона: ");cin>>NOTE[i].telnumb;     //данных
    
    int tel=NOTE[i].telnumb;
    int len=(int)log10((double)tel)+1;
    char *strtel=new char[len+1];
    char *tel3=new char[len+1];
    for(int l=len-1;l>=0;--l)
     {
       int chartel=tel%10;
       strtel[l]='0'+chartel;
       tel/=10;
     }
    strtel[len]='\0';
    int cnt=0;
    for(int m=0;m<3;m++)
     {
       tel3[m]=strtel[m];
       cnt++;
       if (cnt==3)break;
     }
    tel3[m]='\0';
    NOTE[i].tel3numb=atoi(tel3);
    
    for(j=0;j<m;j++) //в структуру
     { 
       cout<<rus(" Введите день рождения: ");cin>>NOTE[i].bdate[j++];
       cout<<rus(" Введите месяц рождения: ");cin>>NOTE[i].bdate[j++];
       cout<<rus(" Введите год рождения: ");cin>>NOTE[i].bdate[j];
     }
    cout<<endl;
   }
 
  while(sort)
   {                                                                          //сортировка
     sort=0;                                                                   //структуры
     for(i=0;i<n-1;i++)                                                           //по первым трем
     if(NOTE[i].tel3numb>NOTE[i+1].tel3numb)                                    //цифрам телефона
      {
        temp=NOTE[i];
        NOTE[i]=NOTE[i+1];
        NOTE[i+1]=temp;
        sort=1;
      }
   }

  cout<<rus(" Записи упорядоченные по первым трем цифрам номера телефона:\n\n");
  for(i=0;i<n;i++)
   {             //вывод отсортированной структуры
    cout<<rus(" Фамилия и имя: ")<<NOTE[i].fio<<endl;
    cout<<rus(" Номер телефона: ")<<NOTE[i].telnumb<<endl;
    cout<<rus(" Первые 3 цифры номера телефона: ")<<NOTE[i].tel3numb<<endl;    
    cout<<rus(" Дата рождения:");
    for(j=0;j<m;j++)
     {
      cout<<NOTE[i].bdate[j]<<'.';
     }
    cout<<endl<<endl;
   } 
 cout<<rus(" Информации о человеке. чья фамилия введена с клавиатуры:")<<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(NOTE[i].fio,surname))
     if(NOTE[i].fio[strlen(surname)]==' '||NOTE[i].fio[strlen(surname)]=='\0')
      {
       cout<<rus(" Фамилия и имя: ")<<NOTE[i].fio<<endl;
       cout<<rus(" Номер телефона: ")<<NOTE[i].telnumb<<endl;
       cout<<rus(" Дата рождения: ");                       //вывод
       for(j=0;j<m;j++)                                    //запрошенной
        {                                                  //информации
         cout<<NOTE[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 структуры NOTE.

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

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

Вариант 13
Вариант 15
error: Content is protected !!