' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2024.09.10.01.33]) on 2024.10.08 at 22:12 (Coordinated Universal Time) _TITLE "Weekday Program" ' Originally a BAM port by Charlie Veniot of a program shared by Carlos Mencia ' However, that algorithm was incorrect, as discovered by TDarcos: ' - entering January 1, 1800 ought to give Wednesday and Mencia's algorithm was giving Tuesday ! ' ' I've replaced Mencia's algorithm with code matching the BASIC code for the "Doomsday Rule" task at Rosettacode ' (https://rosettacode.org/wiki/Doomsday_rule#BASIC) 🟡🟡🟡_Declarations: CONST Weekday$(1 TO 7) = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} SUB PrintItem(label$,v$) COLOR 14 : PRINT LEFT$(label$ + ":" + SPACE$(5), 9); : COLOR 15 : PRINT v$ END SUB ' The following are ported/modded from the referenced line numbers of the BASIC program at Rosettacode 🔆020: DIM Da( 12, 1 ): FOR I = 0 TO 1 : FOR J = 1 TO 12 : READ Da(J,I): NEXT J,I 🔆120: DATA 3,7,7,4,2,6,4,1,5,3,7,5 🔆130: DATA 4,1,7,4,2,6,4,1,5,3,7,5 🟡🟡🟡_MainProgram: 005 SCREEN _NEWIMAGE(144, 112, 7) 010 CLS : SLEEP 0.01 011 inD = PROMPT( " WHICH WEEKDAY ?\n\n DAY:", MID$( DATE$, 4, 2) ) inM = PROMPT( " WHICH WEEKDAY ?\n\n DAY: " + inD + "\n MONTH: " , MID$( DATE$, 1, 2) ) inY = PROMPT( " WHICH WEEKDAY ?\n\n DAY: " + inD + "\n MONTH: " + inM + "\n YEAR: " , MID$( DATE$, 7, 4) ) ' The following are ported/modded from the referenced line numbers of the BASIC program at Rosettacode 🔆050: C = inY \ 100 : R = inY MOD 100 🔆060: S = R \ 12 : T = R MOD 12 🔆070: A = ( 5 * ( C AND 3 ) + 2 ) MOD 7 🔆080: B = ( S + T + ( T \ 4 ) + A ) MOD 7 🔆090: DAY = ( B + inD - Da( inM, -( inY MOD 4 = 0 AND ( inY MOD 100 <> 0 OR inY MOD 400 = 0 ))) + 7 ) MOD 7 + 1 100 COLOR 11 : PRINT "WHICH WEEKDAY ?" : PRINT PrintItem( "DAY", inD ) PrintItem( "MONTH", inM ) PrintItem( "YEAR", inY ) 110 PRINT : PrintItem( "WEEKDAY", Weekday$(DAY) ) 130 COLOR 7 : PRINT PRINT "Click/touch the PRINT "screen or press" PRINT "a key on your" PRINT "keyboard to find" PRINT "another weekday." SLEEP GOTO 10 140 END ' 🟡🟡🟡 Original program by Carlos Mencia ' The program mishandles January 1, 1800 (giving Tuesday instead of the correct Wednesday) '10 PRINT " WHICH WEEKDAY ?" '20 CLEAR:INPUT "Day:";D:INPUT "Month:";M:INPUT "Year:";Y '30 I=INT(Y/100):Y=Y-I*100:IF M<3 THEN LET M=M+12:Y=Y-1 '40 Z=(D+INT(2.6*(M+1))+INT(1.25*Y)+INT (I/4)-2*I-1) '50 X=Z/7:Y=Z-INT(X)*7 '60 IF Y=0 THEN PRINT "Sunday" '70 IF Y=1 THEN PRINT "Monday" '80 IF Y=2 THEN PRINT "Tuesday" '90 IF Y=3 THEN PRINT "Wednesday" '100 IF Y=4 THEN PRINT "Thursday" '110 IF Y=5 THEN PRINT "Friday" '120 IF Y=6 THEN PRINT "Saturday" '130 PRINT :INPUT"Again Y/N";Q$:IF Q$="Y"THEN 20 '140 END