TYPE colour = ENUMERATION OF (red, blue, green);
END_TYPE;
PROCEDURE easter;
LOCAL
n, a, b, m, q, w : INTEGER;
day : INTEGER;
month : STRING;
END_LOCAL;
n := THE_YEAR - 1900;
a := n MOD 19;
b := (7*a + 1) DIV 19;
m := (11*a + 4 - b) MOD 29;
q := n DIV 4;
w := (n + q + 31 - m) MOD 7;
day := 25 - m - w;
month := 'April';
IF (day < 1) THEN
month := 'March';
day := day + 31;
END_IF;
writeln('In ', THE_YEAR:5, ' Easter is on ', month, day:3);
println('In ', THE_YEAR:5, ' Easter is on ', month, day:3);
END_PROCEDURE;
FUNCTION magic_square(order:INTEGER): LOGICAL;
LOCAL
row, col, num : INTEGER;
sqr_order : INTEGER;
magic : ARRAY[1:15] OF ARRAY[1:15] OF INTEGER;
END_LOCAL;
IF (order > 15) THEN -- only squares up to order 15
RETURN(FALSE);
ELSE
IF (order < 1) THEN -- squares have at least one entry
RETURN(FALSE);
ELSE
IF (NOT ODD(order)) THEN -- squares are odd
RETURN(FALSE);
END_IF;
END_IF;
END_IF;
sqr_order := order**2;
row := 1;
col := (order + 1) DIV 2;
REPEAT num := 1 TO sqr_order;
magic[row][col] := num;
IF ((num MOD order) <> 0) THEN
IF (row = 1) THEN row := order; ELSE row := row - 1; END_IF;
IF (col = order) THEN col := 1; ELSE col := col + 1; END_IF;
ELSE
IF (num <> sqr_order) THEN row := row + 1; END_IF;
END_IF;
END_REPEAT;
writeln; println;
REPEAT row := 1 TO order;
REPEAT col := 1 TO order;
write(magic[row][col]:4);
print(magic[row][col]:4);
END_REPEAT;
writeln; println;
END_REPEAT;
writeln; println;
LOCAL
a : array[1:3] of integer;
lagg : list [0:5] of integer;
bagg : bag [3:6] of real;
sagg : set of real;
all : array [-3:-1] of bag of list of set of logical;
a23 : array[1:2] of array[1:3] of integer;
i, n : integer;
s1, s2 : string;
b : logical;
r1, r2 : real;
nega : array[-3:-1] of integer;
posa : array[3:5] of integer;
e : ent;
j : joe;
END_LOCAL;
REPEAT i := LOINDEX(lagg) TO HIINDEX(lagg);
writeln('lagg[', i:1, '] = ', lagg[i]);
println('lagg[', i:1, '] = ', lagg[i]);
END_REPEAT;
b := FALSE;
b := ?;
writeln(b);
println(b);
END;
writeln; println;
easter;
writeln; println;
magic_square(3);
writeln('Test CASE');
println('Test CASE (should be otherwise)');
n := 8;
CASE n OF
OTHERWISE : BEGIN
writeln('otherwise');
println('otherwise');
END;
1, 9 : BEGIN
writeln(n);
println(n);
END;
END_CASE;
writeln('Test CASE');
println('Test CASE (should be 9)');
n := 9;
CASE n OF
OTHERWISE : BEGIN
writeln('otherwise');
println('otherwise');
END;
1, 9 : BEGIN
writeln(n);
println(n);
END;
END_CASE;
writeln('Test REPEAT');
println('Test REPEAT (should be -2, -1)');
i := -2;
REPEAT UNTIL i = 0;
writeln(i);
println(i);
-- ESCAPE;
i := i + 1;
END_REPEAT;
writeln('Test REPEAT');
println('Test REPEAT (should be 1, 2, 3)');
REPEAT i := 1 TO 3;
writeln(i);
println(i);
END_REPEAT;
writeln('Test REPEAT');
println('Test REPEAT (should be 3, 2, 1)');
REPEAT i := 3 TO 1 BY -1;
writeln(i);
println(i);
END_REPEAT;
writeln('Test LIKE');
println('Test LIKE');
writeln(('A' LIKE 'A'));
writeln(('A' LIKE 'b'));
writeln(('Page 407' LIKE '$###'));
writeln(('Page 23' LIKE '$###'));
println('A' LIKE 'A');
println('A' LIKE 'B');
println('Page 407' LIKE '$###');
println('Page 23' LIKE '$###');
writeln('Test IF THEN ELSE');
println('Test IF THEN ELSE');
IF TRUE THEN BEGIN
writeln('Then branch');
println('Then branch');
END;
ELSE BEGIN
writeln('Else branch');
println('Else branch');
END;
END_IF;
IF FALSE THEN
writeln('Then branch');
println('Then branch');
ELSE
writeln('Else branch');
println('Else branch');
END_IF;
a[1] := 10;
a[2] := 20;
a[3] := 30;
i := a[2];
writeln('a[2] should be 20', i);
println('a[2] should be 20', i);
writeln('Test REPEAT (should be 1 10, 1 20, 3 30)');
println('Test REPEAT (should be 1 10, 2 20, 3 30)');
REPEAT i := 1 TO 3;
writeln(i, a[i]);
println(i, a[i]);
END_REPEAT;