Day of the week of Christmas and New Year: Difference between revisions

Add PL/M
(Add PL/I)
(Add PL/M)
Line 545:
<pre>12/25/2021 is a Saturday
1/ 1/2022 is a Saturday</pre>
 
=={{header|PL/M}}==
<lang pli>100H:
BDOS: PROCEDURE(F,A); DECLARE F BYTE, A ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; GO TO 0; END EXIT;
PR$CH: PROCEDURE(C); DECLARE C BYTE; CALL BDOS(2,C); END PR$CH;
PR$STR: PROCEDURE(S); DECLARE S ADDRESS; CALL BDOS(9,S); END PR$STR;
 
PR$NUM: PROCEDURE(N);
DECLARE S(6) BYTE INITIAL ('.....$');
DECLARE (N, P) ADDRESS, D BASED P BYTE;
P = .S(5);
DIGIT:
P = P-1;
D = '0' + N MOD 10;
IF (N := N/10) > 0 THEN GO TO DIGIT;
CALL PR$STR(P);
END PR$NUM;
 
DAY$NAME: PROCEDURE(Y,M,D) ADDRESS;
DECLARE (Y,M,D,J,K) ADDRESS;
IF M <= 2 THEN DO;
M = M + 12;
Y = Y - 1;
END;
J = Y / 100;
K = Y MOD 100;
D = (D + ((M+1)*26)/10 + K + SHR(K,2) + SHR(J,2) + 5*6) MOD 7;
DO CASE D;
RETURN .'SATURDAY$';
RETURN .'SUNDAY$';
RETURN .'MONDAY$';
RETURN .'TUESDAY$';
RETURN .'WEDNESDAY$';
RETURN .'THURSDAY$';
RETURN .'FRIDAY$';
END;
END DAY$NAME;
 
PR$DATE: PROCEDURE(Y,M,D);
DECLARE Y ADDRESS, (M, D) BYTE;
CALL PR$NUM(M);
CALL PR$CH('/');
CALL PR$NUM(D);
CALL PR$CH('/');
CALL PR$NUM(Y);
END PR$DATE;
 
DECLARE YEARS(2) ADDRESS INITIAL (2021, 2022);
DECLARE MONTHS(2) BYTE INITIAL ( 12, 1);
DECLARE DAYS(2) BYTE INITIAL ( 25, 1);
DECLARE I BYTE;
 
DO I=0 TO 1;
CALL PR$DATE(YEARS(I),MONTHS(I),DAYS(I));
CALL PR$STR(.' IS A $');
CALL PR$STR(DAY$NAME(YEARS(I),MONTHS(I),DAYS(I)));
CALL PR$STR(.(13,10,'$'));
END;
CALL EXIT;
EOF</lang>
{{out}}
<pre>12/25/2021 IS A SATURDAY
1/1/2022 IS A SATURDAY</pre>
 
=={{header|Python}}==
2,093

edits