home *** CD-ROM | disk | FTP | other *** search
- with TEXT_IO; use TEXT_IO;
- procedure NEXTDATE is
- type MONTH_TYPE is
- (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC);
- subtype DAY_SUBTYPE is INTEGER range 1 .. 31;
- type DATE is
- record
- DAY : DAY_SUBTYPE;
- MONTH : MONTH_TYPE;
- YEAR : POSITIVE;
- end record;
- PASSED : BOOLEAN := TRUE;
- function TOMORROW(TODAY : in DATE) return DATE is separate;
-
- procedure DISPLAY (S : in STRING; D : in DATE) is
- package INT_IO is new INTEGER_IO(INTEGER); use INT_IO;
- package MON_IO is new ENUMERATION_IO(MONTH_TYPE); use MON_IO;
- begin
- PUT(S);
- PUT(D.DAY, WIDTH => 3); PUT(" ");
- PUT(D.MONTH);
- PUT(D.YEAR, WIDTH => 5); NEW_LINE;
- end DISPLAY;
- procedure COMPARE(TODAY, RIGHT_ANSWER : in DATE) is
- MY_ANSWER : DATE := TOMORROW(TODAY);
- begin
- if MY_ANSWER /= RIGHT_ANSWER then
- DISPLAY("Today: ", TODAY);
- DISPLAY("My answer: ", MY_ANSWER);
- display("Right answer:", RIGHT_ANSWER);
- NEW_LINE;
- PASSED := FALSE;
- end if;
- end COMPARE;
- begin
- COMPARE((12,DEC,1815), (13,DEC,1815)); -- ordinary date
- COMPARE(( 3,FEB,1986), ( 4,FEB,1986)); -- ordinary date in Feb.
- COMPARE((30,JUN,1981), ( 1,JUL,1981)); -- last day of 30-day month
- COMPARE((30,SEP,3999), ( 1,OCT,3999)); -- last day of 30-day month
- COMPARE((31,MAR,1876), ( 1,APR,1876)); -- last day of 31-day month
- COMPARE((31,AUG,1984), ( 1,SEP,1984)); -- last day of 31-day month
- COMPARE((31,DEC,1966), ( 1,JAN,1967)); -- last day of year
- COMPARE((28,FEB,1980), (29,FEB,1980)); -- leap year
- COMPARE((28,FEB,1600), (29,FEB,1600)); -- century leap year
- COMPARE((28,FEB,2100), ( 1,MAR,2100)); -- century non-leap year
- COMPARE((28,FEB,1982), ( 1,MAR,1982)); -- non-leap year
- COMPARE((29,FEB,1980), ( 1,MAR,1980)); -- leap day in leap year
- if PASSED then
- PUT_LINE("Congratulations, you completed the assignment!");
- end if;
- end NEXTDATE;
-