GREGOR
Syntax |
GREGOR (day%, month%, year%) |
Location |
Math Package |
The function GREGOR takes three integers (floats & longs are rounded to the nearest integer) to specify a date and returns the weekday as a number from 1 to 7 where:
1 = Sunday, ( See Note 1 !)
2 = Monday,
3 = Tuesday,
4 = Wednesday,
5 = Thursday,
6 = Friday,
7 = Saturday.
As the name of the function suggests GREGOR uses the Gregorian calender.
This was introduced in 1583, so GREGOR has to refuse earlier years. Invalid parameters are not reported by breaking with an error (unless one of the parameters is out of integer range) but by returning zero.
Example
Print your own calendar!
100 CLS
110 REPeat getmonth
120 INPUT "Year:"!year;TO 12;"Month:"!month
130 firstday$ = GREGOR(1,month,year)
135 firstday=firstday$(1)
140 IF NOT firstday THEN
150 PRINT "Invalid input."
160 ELSE EXIT getmonth
170 END IF
180 END REPeat getmonth
190 FOR lastday = 28 TO 31
200 IF NOT GREGOR(lastday+1,month,year): EXIT lastday
210 END FOR lastday
220 :
230 PRINT \" Sun Mon Tue Wed Thu Fri Sat"
240 PRINT FILL$(" ",4*(firstday-1));
250 FOR day = 1 TO lastday
260 PRINT FILL$(" ",4-LEN(day));day;
265 xday$=GREGOR(day,month,year)
270 IF xday$(1) = 7 THEN PRINT
280 END FOR day
NOTE 1
GREGOR was originally intended to return 1 for Monday, 2 for Tuesday and so on. The current version (v2.05) follows the Christian tradition where Sunday was regarded as the first day of the week. The programming example above corrects this by applying this interpretation and uses:
230 PRINT " Sun Mon Tue Wed Thu Fri Sat"
instead of:
230 PRINT " Mon Tue Wed Thu Fri Sat Sun".
NOTE 2
Current versions (v2.05) of this command include a bug which mean that it will not work correctly on Minerva, SMSQ/E and possibly other ROMs.
CROSS-REFERENCE