tomasf1234

Donovic Doomsday

Jun 4th, 2014
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.38 KB | None | 0 0
  1. /*
  2.  *  doomsday.c
  3.  *  A program to test a function dayOfWeek which determines which
  4.  *  day of the week a particular date falls on.
  5.  *  (only for dates after the start of the Gregorian calendar).
  6.  *
  7.  *  Program stub created by Richard Buckland on 17/03/14
  8.  *  This program by Tomas Donovic on 26/3/14
  9.  *  Freely licensed under Creative Commons CC-BY-3.0
  10.  *
  11.  *
  12.  */
  13.  
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <assert.h>
  17.  
  18. #define THURSDAY 0
  19. #define FRIDAY   1
  20. #define SATURDAY 2
  21. #define SUNDAY   3
  22. #define MONDAY   4
  23. #define TUESDAY  5
  24. #define WEDNESDAY 6
  25.  
  26. #define JAN_DOOMSDAY_LEAP 4
  27. #define JAN_DOOMSDAY_COMMON 3
  28. #define FEB_DOOMSDAY_COMMON 28
  29. #define FEB_DOOMSDAY_LEAP 29
  30. #define MARCH_DOOMSDAY 0
  31. #define APRIL_DOOMSDAY 4
  32. #define MAY_DOOMSDAY 9
  33. #define JUNE_DOOMSDAY 6
  34. #define JULY_DOOMSDAY 11
  35. #define AUGUST_DOOMSDAY 8
  36. #define SEPTEMBER_DOOMSDAY 5
  37. #define OCTOBER_DOOMSDAY 10
  38. #define NOVEMBER_DOOMSDAY 7
  39. #define DECEMBER_DOOMSDAY 12
  40.  
  41. #define TRUE 1
  42. #define FALSE 0
  43. #define DAYS_PER_WEEK 7
  44.  
  45.  
  46. int dayOfWeek (int doomsday, int leapYear, int month, int day);
  47. int dateCalc (int doomsdate, int day, int doomsday);
  48. int doomsdayCalc (int month, int leapYear);
  49. int inputChecker (int doomsday, int LeapYear, int month, int day);
  50.  
  51.  
  52. int main (int argc, char *argv[]) {
  53.    assert (dayOfWeek (THURSDAY,  FALSE,  4,  4) == THURSDAY);
  54.    assert (dayOfWeek (FRIDAY,    FALSE,  6,  6) == FRIDAY);
  55.    assert (dayOfWeek (MONDAY,    FALSE,  8,  8) == MONDAY);
  56.    assert (dayOfWeek (WEDNESDAY, FALSE, 10, 10) == WEDNESDAY);
  57.    assert (dayOfWeek (FRIDAY,    FALSE, 12, 12) == FRIDAY);
  58.    assert (dayOfWeek (THURSDAY,  FALSE,  9,  5) == THURSDAY);
  59.    assert (dayOfWeek (FRIDAY,    FALSE,  5,  9) == FRIDAY);
  60.    assert (dayOfWeek (SUNDAY,    FALSE,  7, 11) == SUNDAY);
  61.    assert (dayOfWeek (TUESDAY,   FALSE, 11,  7) == TUESDAY);
  62.    assert (dayOfWeek (WEDNESDAY, FALSE,  3,  7) == WEDNESDAY);
  63.  
  64.    assert (dayOfWeek (THURSDAY,  FALSE,  4,  5) == FRIDAY);
  65.    assert (dayOfWeek (SATURDAY,  FALSE,  6,  5) == FRIDAY);
  66.    assert (dayOfWeek (MONDAY,    FALSE,  8,  9) == TUESDAY);
  67.    assert (dayOfWeek (WEDNESDAY, FALSE, 10,  9) == TUESDAY);
  68.    assert (dayOfWeek (FRIDAY,    FALSE, 12, 20) == SATURDAY);
  69.    assert (dayOfWeek (THURSDAY,  FALSE,  9,  9) == MONDAY);
  70.    assert (dayOfWeek (FRIDAY,    FALSE,  5,  5) == MONDAY);
  71.    assert (dayOfWeek (SUNDAY,    FALSE,  7,  7) == WEDNESDAY);
  72.    assert (dayOfWeek (TUESDAY,   FALSE, 11, 11) == SATURDAY);
  73.    assert (dayOfWeek (THURSDAY,  FALSE,  3, 30) == SATURDAY);
  74.  
  75.    assert (dayOfWeek (TUESDAY,   FALSE,  2,  28) == TUESDAY);
  76.    assert (dayOfWeek (TUESDAY,   FALSE,  2,  27) == MONDAY);
  77.    assert (dayOfWeek (THURSDAY,  FALSE,  1,  3)  == THURSDAY);
  78.    assert (dayOfWeek (SATURDAY,  FALSE,  2,  1)  == SUNDAY);
  79.    assert (dayOfWeek (0, 1, 7, 1) == 4);
  80.  
  81.    printf ("all tests passed - You are awesome!\n");
  82.    return EXIT_SUCCESS;
  83. }
  84.  
  85.  
  86. // given the doomsday for a year, and whether or not it is a
  87. // leap year, this function return the day of the week for any
  88. // given month and day in the year.
  89.  
  90. int dayOfWeek (int doomsday, int leapYear, int month, int day) {
  91.    
  92.    int badInput = inputChecker (doomsday, leapYear, month, day);
  93.    
  94.  
  95.    int doomsdateRes = doomsdayCalc(month, leapYear);
  96.    int finResult = dateCalc(doomsdateRes, day, doomsday);
  97.    int dayOfWeek = finResult;
  98.    
  99. //calls a bad run if input is bad.
  100.    if(badInput == TRUE) {
  101.       finResult = -99;
  102.       }
  103.  
  104.    printf("%d\n",dayOfWeek);
  105.    return dayOfWeek;
  106. }
  107.  
  108. int inputChecker (int doomsday, int LeapYear, int month, int day) {
  109.    
  110. //Various tests to see if there is user input error.
  111.    int flag = FALSE;
  112.    if(doomsday > 7) {
  113.       if(doomsday < 0) {
  114.          flag = TRUE;
  115.       }
  116.       flag = TRUE;
  117.    }
  118.    if(LeapYear > 1) {
  119.       if(LeapYear <0) {
  120.       flag = TRUE;
  121.       }
  122.    flag = TRUE;
  123.    }
  124.    if(month>12) {
  125.       if(month<1) {
  126.          flag = TRUE;
  127.       }
  128.       flag = TRUE;
  129.    }
  130.    if(day>6) {
  131.       if(day<0) {
  132.          flag = TRUE;
  133.       }
  134.       flag = TRUE;
  135.    }
  136.    return flag;
  137. }
  138.  
  139. int doomsdayCalc (int month, int leapYear) {
  140.    
  141.    int doomsdate;
  142.  
  143.  //Associates month with its doomsday  
  144.  
  145.    if(month == 12) {
  146.       doomsdate = DECEMBER_DOOMSDAY;
  147.    }else if(month == 11) {
  148.       doomsdate = NOVEMBER_DOOMSDAY;
  149.    }else if(month == 10) {
  150.       doomsdate = OCTOBER_DOOMSDAY;
  151.    }else if(month == 9) {
  152.       doomsdate = SEPTEMBER_DOOMSDAY;
  153.    }else if(month == 8) {
  154.       doomsdate = AUGUST_DOOMSDAY;
  155.    }else if(month == 7) {
  156.       doomsdate = JULY_DOOMSDAY;
  157.    }else if(month == 6) {
  158.       doomsdate = JUNE_DOOMSDAY;
  159.    }else if(month == 5) {
  160.       doomsdate = MAY_DOOMSDAY;
  161.    }else if(month == 4) {
  162.       doomsdate = APRIL_DOOMSDAY;
  163.    }else if(month == 3) {
  164.       doomsdate = MARCH_DOOMSDAY;
  165.    }else if(month == 2) {
  166.       if(leapYear == TRUE) {
  167.          doomsdate = FEB_DOOMSDAY_LEAP;
  168.       }else {
  169.          doomsdate = FEB_DOOMSDAY_COMMON;
  170.       }
  171.    }else {
  172.       if(leapYear == TRUE) {
  173.          doomsdate = JAN_DOOMSDAY_LEAP;
  174.       }else {
  175.          doomsdate = JAN_DOOMSDAY_COMMON;
  176.       }
  177.  
  178.    }
  179.    return doomsdate;
  180. }
  181.  
  182. int dateCalc (int doomsdate, int day, int doomsday){
  183.    
  184.    int intRem;
  185.    int rem;
  186.    int result;
  187.  
  188.    intRem = (day - doomsdate);
  189.    rem = intRem % 7;
  190.    if (rem < 0){
  191.       rem = rem + 7;
  192.     }
  193.     result = (doomsday + rem) % 7;
  194.  
  195.     return result;
  196. }
Advertisement
Add Comment
Please, Sign In to add comment