Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
142
Task/Calendar/ALGOL-W/calendar.alg
Normal file
142
Task/Calendar/ALGOL-W/calendar.alg
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
BEGIN
|
||||
INTEGER WIDTH, YEAR;
|
||||
INTEGER COLS, LEAD, GAP;
|
||||
STRING(2) ARRAY WDAYS (0::6);
|
||||
RECORD MONTH ( STRING(9) MNAME; INTEGER DAYS, START_WDAY, AT_POS );
|
||||
REFERENCE(MONTH) ARRAY MONTHS(0::11);
|
||||
WIDTH := 80; YEAR := 1969;
|
||||
|
||||
BEGIN
|
||||
WDAYS(0) := "Su"; WDAYS(1) := "Mo"; WDAYS(2) := "Tu";
|
||||
WDAYS(3) := "We"; WDAYS(4) := "Th"; WDAYS(5) := "Fr"; WDAYS(6) := "Sa";
|
||||
MONTHS( 0) := MONTH(" January", 31, 0, 0 );
|
||||
MONTHS( 1) := MONTH(" February", 28, 0, 0 );
|
||||
MONTHS( 2) := MONTH(" March", 31, 0, 0 );
|
||||
MONTHS( 3) := MONTH(" April", 30, 0, 0 );
|
||||
MONTHS( 4) := MONTH(" May", 31, 0, 0 );
|
||||
MONTHS( 5) := MONTH(" June", 30, 0, 0 );
|
||||
MONTHS( 6) := MONTH(" July", 31, 0, 0 );
|
||||
MONTHS( 7) := MONTH(" August", 31, 0, 0 );
|
||||
MONTHS( 8) := MONTH("September", 30, 0, 0 );
|
||||
MONTHS( 9) := MONTH(" October", 31, 0, 0 );
|
||||
MONTHS(10) := MONTH(" November", 30, 0, 0 );
|
||||
MONTHS(11) := MONTH(" December", 31, 0, 0 )
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
|
||||
PROCEDURE SPACE(INTEGER VALUE N);
|
||||
BEGIN
|
||||
WHILE N > 0 DO BEGIN
|
||||
WRITEON(" "); N := N-1;
|
||||
END
|
||||
END SPACE;
|
||||
|
||||
PROCEDURE INIT_MONTHS;
|
||||
BEGIN
|
||||
INTEGER I;
|
||||
|
||||
IF YEAR REM 4 = 0 AND YEAR REM 100 NOT = 0 OR YEAR REM 400 = 0 THEN
|
||||
DAYS(MONTHS(1)) := 29;
|
||||
|
||||
YEAR := YEAR-1;
|
||||
START_WDAY(MONTHS(0))
|
||||
:= (YEAR * 365 + YEAR DIV 4 - YEAR DIV 100 + YEAR DIV 400 + 1) REM 7;
|
||||
|
||||
FOR I := 1 STEP 1 UNTIL 12-1 DO
|
||||
START_WDAY(MONTHS(I)) :=
|
||||
(START_WDAY(MONTHS(I-1)) + DAYS(MONTHS(I-1))) REM 7;
|
||||
|
||||
COLS := (WIDTH + 2) DIV 22;
|
||||
WHILE 12 REM COLS NOT = 0 DO
|
||||
COLS := COLS-1;
|
||||
GAP := IF COLS - 1 NOT = 0 THEN (WIDTH - 20 * COLS) DIV (COLS - 1) ELSE 0;
|
||||
IF GAP > 4 THEN
|
||||
GAP := 4;
|
||||
LEAD := (WIDTH - (20 + GAP) * COLS + GAP + 1) DIV 2;
|
||||
YEAR := YEAR+1
|
||||
END INIT_MONTHS;
|
||||
|
||||
PROCEDURE PRINT_ROW(INTEGER VALUE ROW);
|
||||
BEGIN
|
||||
INTEGER C, I, FROM, UP_TO;
|
||||
INTEGER PROCEDURE PREINCREMENT(INTEGER VALUE RESULT I);
|
||||
BEGIN I := I+1; I
|
||||
END PREINCREMENT;
|
||||
INTEGER PROCEDURE POSTINCREMENT(INTEGER VALUE RESULT I);
|
||||
BEGIN INTEGER PREV_VALUE;
|
||||
PREV_VALUE := I; I := I+1; PREV_VALUE
|
||||
END POSTINCREMENT;
|
||||
FROM := ROW * COLS;
|
||||
UP_TO := FROM + COLS;
|
||||
SPACE(LEAD);
|
||||
FOR C := FROM STEP 1 UNTIL UP_TO-1 DO BEGIN
|
||||
I := 9 % LENGTH OF MNAME(MONTHS(C)) % ;
|
||||
SPACE((20 - I) DIV 2);
|
||||
WRITEON(MNAME(MONTHS(C)));
|
||||
SPACE(20 - I - (20 - I) DIV 2 + (IF C = UP_TO - 1 THEN 0 ELSE GAP));
|
||||
END;
|
||||
WRITE();
|
||||
|
||||
SPACE(LEAD);
|
||||
FOR C := FROM STEP 1 UNTIL UP_TO-1 DO BEGIN
|
||||
FOR I := 0 STEP 1 UNTIL 7-1 DO BEGIN
|
||||
WRITEON(WDAYS(I)); IF I NOT = 6 THEN WRITEON(" ")
|
||||
END;
|
||||
IF C < UP_TO - 1 THEN
|
||||
SPACE(GAP)
|
||||
ELSE
|
||||
WRITE();
|
||||
END;
|
||||
WHILE BEGIN
|
||||
C := FROM;
|
||||
WHILE C < UP_TO AND AT_POS(MONTHS(C)) >= DAYS(MONTHS(C)) DO
|
||||
C := C + 1;
|
||||
|
||||
C NOT = UP_TO
|
||||
END DO BEGIN
|
||||
|
||||
SPACE(LEAD);
|
||||
C := FROM;
|
||||
WHILE C < UP_TO DO BEGIN
|
||||
I := 0;
|
||||
WHILE I < START_WDAY(MONTHS(C)) DO BEGIN
|
||||
I := I + 1;
|
||||
SPACE(3)
|
||||
END;
|
||||
WHILE POSTINCREMENT(I) < 7 AND AT_POS(MONTHS(C)) < DAYS(MONTHS(C)) DO BEGIN
|
||||
WRITEON(I_W := 2, S_W := 0, PREINCREMENT(AT_POS(MONTHS(C))));
|
||||
IF I < 7 OR C < UP_TO - 1 THEN
|
||||
SPACE(1)
|
||||
END;
|
||||
WHILE POSTINCREMENT(I) <= 7 AND C < UP_TO-1 DO
|
||||
SPACE(3);
|
||||
IF C < UP_TO - 1 THEN
|
||||
SPACE(GAP - 1);
|
||||
START_WDAY(MONTHS(C)) := 0;
|
||||
C := C + 1
|
||||
END;
|
||||
WRITE();
|
||||
END;
|
||||
WRITE()
|
||||
END PRINT_ROW;
|
||||
|
||||
PROCEDURE PRINT_YEAR;
|
||||
BEGIN
|
||||
INTEGER ROW, STRLEN, Y;
|
||||
STRLEN := 1;
|
||||
Y := YEAR;
|
||||
WHILE Y > 9 DO BEGIN Y := Y DIV 10; STRLEN := STRLEN + 1 END;
|
||||
SPACE((WIDTH - STRLEN) DIV 2);
|
||||
WRITEON(I_W := 1, YEAR);
|
||||
WRITE(); WRITE();
|
||||
WHILE ROW * COLS < 12 DO BEGIN
|
||||
PRINT_ROW(ROW);
|
||||
ROW := ROW+1
|
||||
END
|
||||
END PRINT_YEAR;
|
||||
|
||||
INIT_MONTHS;
|
||||
PRINT_YEAR
|
||||
END
|
||||
END.
|
||||
Loading…
Add table
Add a link
Reference in a new issue