Описать структуру содержащую поля

Ответить
LuenFen
Сообщения: 2
Зарегистрирован: 16 апр 2009, 22:50

16 апр 2009, 23:02

Описать структуру с именем ZNAK, содержащую следущие поля:NAME - фамилия, имя; ZODIAC - знак зодиака;BDAY - день рождения(массив из трех чисел) и сформировать массив BOOK состоящий из восьми сруктур типа ZNAK; записи должны быть неупорядочены по любому из полей. Выполнить следущие действия: вывод на дисплей содержимого массива, упорядоченного по знакам зодиака; вывод на экран информации о людях, родившхся в месяц, значение которого введено с клавиатуры; если такх нет, выдать на дисплей соответсвующее сообщение.



Получилось вот только это. 1. Помогите с днем рождения - не могу понять "BDAY - день рождения(массив из трех чисел)" 2. Как упорядочить по зодиакам? Заранее спасибо

Код: Выделить всё

#include <stdio.h>
#include <string.h>
#include <conio.h>
struct ZNAK{
       char NAME[100];
       char ZODIAC[100];
       int BDAY[3];};
void SORT(ZNAK *x);
void NTR(ZNAK    x[8]);
int main()
{
 
clrscr();
ZNAK BOOK[8]={     {"Ivanov","oven",1,04,91},
          {"Petrov","strelec",12,9,64},
          {"Sidorov","ribi",1,03,38},
          {"Kuznecov","telec",7,05,64},
          {"Krilov","vesi",18,10,86},
          {"Tolstoy","lev",20,8,78},
          {"Pushkin","vodoley",10,02,06},
          {"Lermontov","rak",22,07,12}};
SORT(BOOK);
NTR(BOOK);
getch();
return 0;
}
 
void SORT(ZNAK x[8])
     {
     ZNAK temp;
     int i,j,imin;
     for(i=0;i<6;i++)
          {
          imin=i;
          for(j=i+1;j<7;j++) if(x[j].BDAY<x[imin].BDAY) imin=j;
          temp=x[i];
          x[i]=x[imin];
          x[imin]=temp;
     }
for(i=0;i<8;i++)
     {
     printf("----------------------------------------\n");
     printf("%s #: %s BDAY: %d\n",x[i].NAME,x[i].ZODIAC,x[i].BDAY);}
     for (int i=0; i < 8; i++){
         printf("%2.1lf ", BDAY[i]);
     printf("----------------------------------------\n");
     }
 
void NTR(ZNAK x[8])
     {
     int i,count=0;
     scanf("%d", &i);
     for(int k=0;k<8;k++)
     if(x[k].BDAY[i]==i)
          {
          printf("%s #: %s BDAY: %d\n",x[k].NAME,x[k].ZODIAC,x[k].BDAY);
          count++;
          }
     if(!count) printf("Net ludey");
     }
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

18 апр 2009, 12:08

Я бы сделал так:

Код: Выделить всё

#include <string>
#include <vector>
 
struct ZNAK
{
       std::string NAME;
       std::string ZODIAC;
       unsigned int BDAY[3];
};
 
std::vector< ZNAK > BOOK = {("Ivanov","oven",1,04,91),...};
...
void PrintBook()
{
    for (size_t i =0; i < BOOK.size(); ++i)
    {
        cout<<BOOK[i].NAME<<endl;
        ...
    }
}
Всё очень просто. Я не писал всех процедур и всех операторов. Набирал код на форуме, так что может не компилиться.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
Ответить