#include main() //---------------------------------------------------------- // Function to validate date format // returns "0" if format is invalid, // otherwise returns "1" int isValidDate(int day, int month, int year) { if ((day < 1) || (day > 31)) return 0; if ((month < 1) || (month > 12)) return 0; if ((year < 1901) || (year > 2099)) return 0; return 1; } //---------------------------------------------------------- // Function to calculate the day of week and define // day_of_week accordingly (0 = Monday, 6 = Sunday) int dayOfWeek(int day, int month, int year) { // Calculate passed days of current year: int daysPassed = 0; int monthsCounted = 1; while (monthsCounted < month) { if ((monthsCounted == 1) || (monthsCounted == 3) || (monthsCounted == 5) || (monthsCounted == 7) || (monthsCounted == 8) || (monthsCounted == 10) || (monthsCounted == 12)) { daysPassed = daysPassed + 31; } if ((monthsCounted == 4) || (monthsCounted == 6) || (monthsCounted == 9) || (monthsCounted == 11)) { daysPassed = daysPassed + 30; } if (monthsCounted == 2) { daysPassed = daysPassed + 28; } monthsCounted++; } daysPassed = daysPassed + day; // add days for passed years daysPassed = daysPassed + ((year-1901)*365); // consider leap years int leap years = (year - 1901) / 4; daysPassed = daysPassed + leap years; // if current year is a leap year, add one day to passed days if ((year % 4) == 0) daysPassed++; return (daysPassed % 7); } //---------------------------------------------------------- // Function to print weekday in English depending // on day_of_week void printWeekDay(int day_of_week) { switch (day_of_week) { case 0 : printf("Monday\n"); break; case 1 : printf("Tuesday\n"); break; case 2 : printf("Wednesday\n"); break; case 3 : printf("Thursday\n"); break; case 4 : printf("Friday\n"); break; case 5 : printf("Saturday\n"); break; case 6 : printf("Sunday\n"); break; } } //---------------------------------------------------------- //Main program // // Gets input date and calls previously defined // functions to calculate and output weekday ov given date // Will return "0" if input date is invalid, // otherwise will output weekday in english and return "1" int main () { int day = 0, month = 0, year = 0; printf("Enter DD/MM/YYYY\n"); scanf("%02d/%02d/%04d", &day, &month, &year); if (isValidDate(day, month, year) == 0) { printf("Invalid date: %02d/%02d/%04d", day, month, year); return 1; } int day_of_week = dayOfWeek(day, month, year); printWeekDay(day_of_week); return 0; }