MODULE Showcase8; // Complete tour at v3-step3.4: CONSTs, subranges, arrays (flat + // nested + copies), strings, sets, records, WITH (nested), // REALs, all control flow. Expected ExitCode: 170. CONST K = 10; TYPE Score = [0..20]; TYPE Vec = ARRAY [0..4] OF INTEGER; TYPE Mat = ARRAY [0..1, 0..2] OF INTEGER; TYPE Small = SET OF [0..7]; TYPE Point = RECORD x, y : INTEGER END; TYPE Rect = RECORD org, ext : Point; tags : ARRAY [0..1] OF INTEGER END; VAR ExitCode, i, sum : INTEGER; VAR sc : Score; VAR v : Vec; VAR m : Mat; VAR s : Small; VAR r : REAL; VAR t : ARRAY [0..2] OF CHAR; VAR rc : Rect; BEGIN (* 0+10+20+30+40 = 100 *) sum := 0; FOR i := 0 TO 4 DO v[i] := i * K; sum := sum + v[i] END; m[0, 0] := 1; m[0, 1] := 2; m[0, 2] := 3; m[1, 0] := 4; m[1, 1] := 5; m[1, 2] := 6; (* +6 = 106 *) sum := sum + m[1, 2]; (* {1,3,5}+{3,4}; 4 IN -> +1 = 107 *) s := {1, 3, 5} + {3, 4}; IF 4 IN s THEN sum := sum + 1 END; (* "abc"; t[1] = 'b' -> +2 = 109 *) t := "abc"; IF t[1] = 'b' THEN sum := sum + 2 END; (* rc.org = (20, 22) -> +42 = 151 *) rc.org.x := 20; WITH rc DO WITH org DO y := x + 2 END END; sum := sum + rc.org.x + rc.org.y; (* subrange -> +7 = 158 *) sc := 7; sum := sum + sc; (* 158/2+0.5 = 79.5 > 79 -> +10 = 168 *) r := sum; r := r / 2.0 + 0.5; IF r > 79.0 THEN sum := sum + 10 END; (* 168 MOD 5 = 3 -> +1 = 169 *) CASE sum MOD 5 OF 0..1 : sum := sum + 100 | 2..3 : sum := sum + 1 ELSE sum := sum + 1000 END; (* down to 165 *) WHILE sum > 165 DO sum := sum - 1 END; (* up to 167 *) REPEAT sum := sum + 1 UNTIL sum >= 167; (* up to 170 *) LOOP IF sum >= 170 THEN EXIT END; sum := sum + 1 END; ExitCode := sum END Showcase8.