#include "types.h" #include bool is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 4 == 0 && year % 400 == 0); } /** * Determine whether the provided date is valid. * * @param date Datová struktura reprezentující datum * * @return `true` v případě validního data, `false` jinak */ bool is_valid_date(struct date_t date) { return !(date.day > 31 || date.day < 1 || date.month > 12 || date.month < 1 || (date.month == 2 && date.day > 29 && is_leap_year(date.year)) || (date.month == 2 && date.day > 28 && !is_leap_year(date.year)) || date.year < 1582 || date.year > 2024 || ((date.month == 4 || date.month == 6 || date.month == 9 || date.month == 11) && date.day > 30)); } /** * Find the earlier date by comparing years, months and days. * * @param date1 Datová struktura reprezentující první datum * @param date2 Datová struktura reprezentující druhé datum * * @return `DATE1_IS_EARLIER` v případě date1 je dřívější, * `DATE1_IS_LATER` když date2 je dřívější, * `DATES_ARE_EQUAL` jinak (data jsou stejná) */ int earlier_date(struct date_t date1, struct date_t date2) { // TODO: implementujte funkci dle zadání if (date1.year == date2.year && date1.month == date2.month && date1.day == date2.day) { return DATES_ARE_EQUAL; } if (date1.year < date2.year || (date1.year == date2.year && date1.month < date2.month) || (date1.year == date2.year && date1.month == date2.month && date1.day < date2.day)) { return DATE1_IS_EARLIER; } return DATE1_IS_LATER; } #ifndef TEST_BUILD int main(void) { struct date_t date1, date2; // Load two dates from the user printf("Provide the first date (format yyyy-mm-dd): "); scanf("%d-%d-%d", &date1.year, &date1.month, &date1.day); printf("Provide the second date (format yyyy-mm-dd): "); scanf("%d-%d-%d", &date2.year, &date2.month, &date2.day); // Check that the dates are valid if (!is_valid_date(date1) || !is_valid_date(date2)) { printf("Invalid date!\n"); return 1; } // Compare the dates and find the earlier one int earlier = earlier_date(date1, date2); if (earlier == DATE1_IS_EARLIER) { printf("The date %d-%d-%d is earlier.\n", date1.year, date1.month, date1.day); } else if (earlier == DATE1_IS_LATER) { printf("The date %d-%d-%d is earlier.\n", date2.year, date2.month, date2.day); } else { printf("The dates are the same.\n"); } return 0; } #endif