Массив записей, содержащих дату, упорядочить по возрастанию - C (СИ)
Формулировка задачи:
Дан массив записей, содержащих дату (число, месяц, год) и время (час, минута, секунда). Упорядочить этот массив в порядке «возрастания», т.е. от более ранних значений к более поздним. помогите пожалуйста, вообще не понимаю что и как нужно сделать (Си, ncurses)
Решение задачи: «Массив записей, содержащих дату, упорядочить по возрастанию»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> typedef struct datetime { int day,mon,year,hour,min,sec; }; int dates_compare(datetime d1,datetime d2) { if (d1.year>d2.year) return 1; else if (d1.year<d2.year) return -1; else { if (d1.mon>d2.mon) return 1; else if (d1.mon<d2.mon) return -1; else { if (d1.day>d2.day) return 1; else if (d1.day<d2.day) return -1; else { if (d1.hour>d2.hour) return 1; else if (d1.hour<d2.hour) return -1; else { if (d1.min>d2.min) return 1; else if (d1.min<d2.min) return -1; else { if (d1.sec>d2.sec) return 1; else if (d1.sec<d2.sec) return -1; else return 0; } } } } } } int main() { const int n=10; datetime d[n]; int i,j; printf ("\nИсходные данные"); for (i=0; i<n; i++) { //вводить столько информации с клавы мне лень d[i].day=1+random(28); d[i].mon=1+random(12); d[i].year=2000+random(14); d[i].hour=random(24); d[i].min=random(60); d[i].sec=random(60); printf ("\n%02d.%02d.%4d, %02d:%02d:%02d", d[i].day,d[i].mon,d[i].year,d[i].hour,d[i].min,d[i].sec); } datetime temp; for (i=0; i<n-1; i++) for (j=i+1; j<n; j++) if (dates_compare(d[i],d[j])>0) { temp=d[i]; d[i]=d[j]; d[j]=temp; } printf ("\nОстортированные данные"); for (i=0; i<n; i++) printf ("\n%02d.%02d.%4d, %02d:%02d:%02d", d[i].day,d[i].mon,d[i].year,d[i].hour,d[i].min,d[i].sec); printf("\n"); system("pause"); return 0; }
Объяснение кода листинга программы
В этом коде используется структура данных datetime, которая содержит поля для хранения дня, месяца, года, часа, минуты и секунды. Функция dates_compare сравнивает два объекта datetime и возвращает значение меньше или равное нулю, если первый объект меньше второго по годам, и больше нуля, если первый объект больше второго. Если года равны, функция сравнивает месяцы, дни, часы, минуты и секунды. В функции main создается массив из 10 объектов datetime с случайными значениями. Затем в цикле происходит сортировка этого массива с использованием функции dates_compare и алгоритма сортировки пузырьком. После сортировки выводится отсортированный массив.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д