Выборка по нескольким полям в структуре - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Помогите понять принцип выборки в структуре, если условие выборки не одно поле, а несколько. Нужно написать функцию, которая в структуре (инструмент, год выпуска, месяц, день) выводит самый "древний" инструмент. Вот что написано в данную минуту. Выдает бред. Строго прошу не судить-начинающий
void find(FILE *tf)
{char c; int i,max,max_y,max_m,max_d;
 clrscr();
 tf=fopen("file1.dat","rb+"); // Открытие бинарного файла для чтения\записи
 fread (&t1,sizeof(t1),1,tf);
 max=-1;
 while (!feof(tf))
  {
   if (max<t1.y, max<t1.m, max<t1.d)
  {  max_y=t1.y;
     max_m=t1.m;
     max_d=t1.d;
}
       printf(" Инструмент %10s Год %d Месяц %d День %d",t1.name,&max_y,&max_m,&max_d);
}
 
   printf("\n Изменить? y/n ");
   c=getch();
   if (c=='y')
     { printf("\n Инструмент: "); scanf("%s",&t1.name);
       printf("\n Год: "); scanf("%d",&t1.y);
       printf("\n Месяц: "); scanf("%d",&t1.m);
       printf("\n День: "); scanf("%d",&t1.d);
       i=sizeof(t1);
       fseek(tf, -i, 1); // Возврат на sizeof(t1) байт назад
      fwrite(&t1,sizeof(t1),1,tf);//запись измененной структуры
     }
fread(&t1,sizeof(t1),1,tf);
fclose(tf);
}
Ну хоть пните в нужном направлении.

Решение задачи: «Выборка по нескольким полям в структуре»

textual
Листинг программы
//Сортировка по датам рождения
    for(i = 0; i < N; i++)
    for(j = i + 1; j < N; j++)
    {
        if(BOOK[i].BDAY[0] < BOOK[j].BDAY[0])
            swpZNAK(BOOK[i], BOOK[j]);
        else
        if(BOOK[i].BDAY[0] == BOOK[j].BDAY[0])
        {
            if(BOOK[i].BDAY[1] < BOOK[j].BDAY[1])
                swpZNAK(BOOK[i], BOOK[j]);
            else
                        if(BOOK[i].BDAY[1] == BOOK[j].BDAY[1])
            if(BOOK[i].BDAY[2] < BOOK[j].BDAY[2])
                swpZNAK(BOOK[i], BOOK[j]);
        }
    }

Объяснение кода листинга программы

Код выполняет сортировку массива структур по датам рождения. Структура BOOK содержит поля BDAY[0], BDAY[1] и BDAY[2], которые представляют собой три компонента даты рождения. Список элементов кода:

  1. Сортировка по датам рождения
  2. Цикл для прохода по всем элементам массива
  3. Сравнение и обмен элементов массива внутри цикла
  4. Если первое поле дат рождения меньше, то обмен элементов
  5. Если первое поле дат рождения равно, то проход по второму полю
  6. Если второе поле дат рождения меньше, то обмен элементов
  7. Если второе поле дат рождения равно, то проход по третьему полю
  8. Если третье поле дат рождения меньше, то обмен элементов
  9. Если третье поле дат рождения равно, то элементы считаются равными
  10. Цикл завершается после прохода по всем элементам массива

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы