Contributor: ANDREW KEY               

{===========================================================================
Date: 10-04-93 (12:39)
From: ANDREW KEY
Subj: What is NEXT day ??
---------------------------------------------------------------------------
 AC> My assignment is to write a program, given three integers whose values
 AC> represent a day between January 1, 1900 and December 30, 1999, will
 AC> output the value representing the day following.

 AC> I am running into problems with three things.  The end of a month, the
 AC> end of a year, and leap years.

Here's a procedure you might get some ideas from... }

procedure NextDay(var MM,DD,YYYY: integer);
  const
    DaysInMonth: array[0..1,1..12] of integer =
      ((31,28,31,30,31,30,31,31,30,31,30,31),   {regular year}
       (31,29,31,30,31,30,31,31,30,31,30,31));  {leap year}
  var
    Leap: integer;
  begin
    Inc(DD);                            {increment day}
    if (YYYY mod 4) = 0 then            {is it a leap year?}
      Leap:=1                           {Leap year}
    else
      Leap:=0;                          {non-leap year}
    if DD>DaysInMonth[Leap,MM] then     {is DD > the end of the month?}
      begin
        DD:=1;                          {set to 1st of month}
        Inc(MM);                        {increment month by one}
        if MM>12 then                   {is MM > December?}
          begin
            MM:=1;                      {set MM to January}
            Inc(YYYY);                  {and increment YYYY}
          end; {if MM>12}
      end; {if DD>Days}
  end; {proc NextDay}