Массив записей, содержащих дату, упорядочить по возрастанию - 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 и алгоритма сортировки пузырьком. После сортировки выводится отсортированный массив.