P4
Math 2984 - Fall 2017
Intro to Mathematical Problem Solving


Project Task #4: Determine the day of the week for a given date.


COMMENT: 1 January 1900 was a Monday. Knowing the date of your birthday, what day of the week was it?

Let W stand for a weekday, and think of the weekdays numbered as follows:

      0 = Sunday
      1 = Monday
      2 = Tuesday
      3 = Wednesday
      4 = Thursday
      5 = Friday
      6 = Saturday
      

Use 1 January 1900 as the starting date, and record this as D1 / M1 / Y1 = 1 / 1 / 1900 with W1 = 1.

Assume your birthday is D2 / M2 / Y2, and we want to work out W2.

Outline #1:

        Start at Monday, 1 January 1900.
        The next day is Tuesday, 2 January 1900.
        and just count your way up.
      

Outline #2:

        Initialize D / M / Y to D1 / M1 / Y1 and W to W1.

        Until you reach the desired date

          Increase the weekday by 1
          if the weekday is 7, reset it to 0

          Increase the day by 1

          If the day number is too big for the month
            set the day number back to 1  
            increase the month
            if the month is more than 12
              set the month to January
              increase the year
      

You will need function value = year_is_leap(y) which returns true if year y is a leap year. Use the following logic to design your function:

      if year is not divisible by 4 then it is not a leap year
      but if year is not divisible by 100 then it is a leap year
      but if year is not divisible by 400 then it is not a leap year
      otherwise it is a leap year
      

You will need function days = month_length(m,y) which returns days, the number of days in month m, in year y.

      function days = month_length ( m, y )
        day_list = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
        days = day_list ( m );
        if the month is February
          if the year is leap
            days = 29
      

Test your year_is_leap() and month_length() functions first, before trying the whole program!


INSTRUCTIONS:

        function w = weekday ( D2, M2, Y2 )

          Initialize D / M / Y to D1 / M1 / Y1 and W to W1.

          WHILE ( D ~= D2 || M ~= M2 || Y ~= Y2 )

            Increase W by 1.
            Replace W by mod ( W, 7 ).

            Increase D by 1.

            If D is greater than the number of days in month M       
              D = 1
              M = M + 1
              if M is greater than 12
                M = 1
                Y = Y + 1
              end
            end
          end
        return
        end
      


CHECK: 25 August 1944 is a Friday. In other words,

        w = weekday ( 25, 8, 1944 )
      
should return w = 5.


SUBMIT: Your work should be stored in a script file called "p4.m", and should begin:

        % p4.m
        % YOUR NAME
        % This script (describe what it does)