Выборка по нескольким полям в структуре - 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], которые представляют собой три компонента даты рождения. Список элементов кода:
- Сортировка по датам рождения
- Цикл для прохода по всем элементам массива
- Сравнение и обмен элементов массива внутри цикла
- Если первое поле дат рождения меньше, то обмен элементов
- Если первое поле дат рождения равно, то проход по второму полю
- Если второе поле дат рождения меньше, то обмен элементов
- Если второе поле дат рождения равно, то проход по третьему полю
- Если третье поле дат рождения меньше, то обмен элементов
- Если третье поле дат рождения равно, то элементы считаются равными
- Цикл завершается после прохода по всем элементам массива
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д