MODULE MayanNums; (* Mayan numerals *) FROM STextIO IMPORT ReadString, SkipLine, WriteLn, WriteString; FROM SWholeIO IMPORT WriteInt; CONST MaxM = 20; (* maximum number of digits *) TYPE TMayanDigit = ARRAY [0 .. 4] OF CHAR; (* a single digit *) TLS = ARRAY [0 .. 5] OF TMayanDigit; CONST LS = TLS{" "," . "," .. ","... ","....","----"}; VAR D : ARRAY [1 .. MaxM] OF CARDINAL; InputNumber: ARRAY [1 .. MaxM] OF CHAR; I, J, L, M, S: CARDINAL; N: INTEGER; BEGIN WriteString("Number: "); ReadString(InputNumber); SkipLine; M := LENGTH(InputNumber); IF M > MaxM THEN M := MaxM END; FOR I := 1 TO M DO D[I] := ORD(InputNumber[I]) - ORD("0"); END; FOR J := M - 1 TO 1 BY -1 DO FOR I := 1 TO J DO D[I + 1] := D[I + 1] + 10 * (D[I] MOD 2); D[I] := D[I] DIV 2 END END; S := 1; WHILE (D[S] = 0) AND (S < M) DO S := S + 1 END; FOR I := S TO M DO WriteString("+----") END; WriteString("+"); WriteLn; FOR L := 3 TO 0 BY -1 DO FOR I := S TO M DO IF (D[I] = 0) AND (L = 0) THEN WriteString("| @ ") ELSE N := D[I] - 5 * L; IF N > 5 THEN N := 5 ELSIF N < 0 THEN N := 0 END; WriteString("|"); WriteString(LS[N]); END END; WriteString("|"); WriteLn END; FOR I := S TO M DO WriteString("+----") END; WriteString("+"); WriteLn END MayanNums.