- //Oscar Duretto
- //Last Edited 25/3/15
- /*
- * doomsday.c
- * A program to test a function dayOfWeek which determines which
- * day of the week a particular date falls on.
- * (only for dates after the start of the Gregorian calendar).
- *
- * Program stub created by Richard Buckland on 17/03/14
- * This program by YOUR-NAME-HERE
- * Freely licensed under Creative Commons CC-BY-3.0
- *
- *
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <assert.h>
- #define THURSDAY 0
- #define FRIDAY 1
- #define SATURDAY 2
- #define SUNDAY 3
- #define MONDAY 4
- #define TUESDAY 5
- #define WEDNESDAY 6
- #define TRUE 1
- #define FALSE 0
- #define DAYS_PER_WEEK 7
- //Specific date of doomsday in each month
- #define DOOMSDAY_JAN 3
- #define DOOMSDAY_FEB 28
- #define DOOMSDAY_MAR 7
- #define DOOMSDAY_APR 4
- #define DOOMSDAY_MAY 9
- #define DOOMSDAY_JUN 6
- #define DOOMSDAY_JUL 11
- #define DOOMSDAY_AUG 8
- #define DOOMSDAY_SEP 5
- #define DOOMSDAY_OCT 10
- #define DOOMSDAY_NOV 7
- #define DOOMSDAY_DEC 12
- int dayOfWeek (int doomsday, int leapYear, int month, int day);
- int main (int argc, char *argv[]) {
- //tests to make sure function is working
- //general testing
- assert (dayOfWeek (THURSDAY, FALSE, 4, 4) == THURSDAY);
- assert (dayOfWeek (FRIDAY, FALSE, 6, 6) == FRIDAY);
- assert (dayOfWeek (MONDAY, FALSE, 8, 8) == MONDAY);
- assert (dayOfWeek (WEDNESDAY, FALSE, 10, 10) == WEDNESDAY);
- assert (dayOfWeek (FRIDAY, FALSE, 12, 12) == FRIDAY);
- assert (dayOfWeek (THURSDAY, FALSE, 9, 5) == THURSDAY);
- assert (dayOfWeek (FRIDAY, FALSE, 5, 9) == FRIDAY);
- assert (dayOfWeek (SUNDAY, FALSE, 7, 11) == SUNDAY);
- assert (dayOfWeek (TUESDAY, FALSE, 11, 7) == TUESDAY);
- assert (dayOfWeek (WEDNESDAY, FALSE, 3, 7) == WEDNESDAY);
- assert (dayOfWeek (THURSDAY, FALSE, 4, 5) == FRIDAY);
- assert (dayOfWeek (SATURDAY, FALSE, 6, 5) == FRIDAY);
- assert (dayOfWeek (MONDAY, FALSE, 8, 9) == TUESDAY);
- assert (dayOfWeek (WEDNESDAY, FALSE, 10, 9) == TUESDAY);
- assert (dayOfWeek (FRIDAY, FALSE, 12, 20) == SATURDAY);
- assert (dayOfWeek (THURSDAY, FALSE, 9, 9) == MONDAY);
- assert (dayOfWeek (FRIDAY, FALSE, 5, 5) == MONDAY);
- assert (dayOfWeek (SUNDAY, FALSE, 7, 7) == WEDNESDAY);
- assert (dayOfWeek (TUESDAY, FALSE, 11, 11) == SATURDAY);
- assert (dayOfWeek (THURSDAY, FALSE, 3, 30) == SATURDAY);
- assert (dayOfWeek (TUESDAY, FALSE, 2, 28) == TUESDAY);
- assert (dayOfWeek (TUESDAY, FALSE, 2, 27) == MONDAY);
- assert (dayOfWeek (THURSDAY, FALSE, 1, 3) == THURSDAY);
- //leapyear testing
- assert (dayOfWeek (WEDNESDAY, FALSE, 2, 28) == WEDNESDAY);
- assert (dayOfWeek (WEDNESDAY, TRUE, 2, 28) == TUESDAY);
- assert (dayOfWeek (MONDAY, FALSE, 1, 29) == SATURDAY);
- assert (dayOfWeek (WEDNESDAY, TRUE, 1, 29) == SUNDAY);
- assert (dayOfWeek (SUNDAY, TRUE, 7, 7) == WEDNESDAY);
- //Birthday! 2015, 2012
- assert (dayOfWeek (SATURDAY, FALSE, 7, 9) == THURSDAY);
- assert (dayOfWeek (WEDNESDAY, TRUE, 7, 9) == MONDAY);
- //End and start of year
- assert (dayOfWeek (MONDAY, FALSE, 12, 31) == SATURDAY);
- assert (dayOfWeek (WEDNESDAY, TRUE, 1, 1) == SUNDAY);
- assert (dayOfWeek (MONDAY, FALSE, 2, 2) == WEDNESDAY);
- printf ("all tests passed - You are awesome!\n");
- return EXIT_SUCCESS;
- }
- // given the doomsday for a year, and whether or not it is a
- // leap year, this function return the day of the week for any
- // given month and day in the year.
- int dayOfWeek (int doomsday, int leapYear, int month, int day) {
- int dayOfWeek;
- int doomsdayOfMonth;
- int differenceBetweenDays;
- //Finds the specific doomsday date for the month being checked
- if (month == 1) {
- doomsdayOfMonth = DOOMSDAY_JAN;
- }
- if (month == 2) {
- doomsdayOfMonth = DOOMSDAY_FEB;
- }
- if (month == 3) {
- doomsdayOfMonth = DOOMSDAY_MAR;
- }
- if (month == 4) {
- doomsdayOfMonth = DOOMSDAY_APR;
- }
- if (month == 5) {
- doomsdayOfMonth = DOOMSDAY_MAY;
- }
- if (month == 6) {
- doomsdayOfMonth = DOOMSDAY_JUN;
- }
- if (month == 7) {
- doomsdayOfMonth = DOOMSDAY_JUL;
- }
- if (month == 8) {
- doomsdayOfMonth = DOOMSDAY_AUG;
- }
- if (month == 9) {
- doomsdayOfMonth = DOOMSDAY_SEP;
- }
- if (month == 10) {
- doomsdayOfMonth = DOOMSDAY_OCT;
- }
- if (month == 11) {
- doomsdayOfMonth = DOOMSDAY_NOV;
- }
- if (month == 12) {
- doomsdayOfMonth = DOOMSDAY_DEC;
- }
- //doomsday dates of Jan and Feb are one day after in a leap year
- if ((leapYear) && (month <= 2)) {
- doomsdayOfMonth = doomsdayOfMonth + 1;
- }
- //calculates how far from day of week is the doomsday
- differenceBetweenDays = (day - doomsdayOfMonth) % DAYS_PER_WEEK;
- //then calculates day of week
- dayOfWeek = DAYS_PER_WEEK + differenceBetweenDays + doomsday;
- //corrects any numbers that are >= 7 from previous equation
- dayOfWeek = (dayOfWeek % DAYS_PER_WEEK);
- return (dayOfWeek);
- }
Download file:
doomsday.c
(4.9 KB)
