MODULE Showcase7; // Complete tour at v3-step3.3: CONSTs, subranges, aliases, arrays, // strings, sets, REALs, all statements. Expected ExitCode: 219. CONST K = 10; TYPE R = [0..20]; TYPE A = INTEGER; TYPE Vec = ARRAY [0..4] OF INTEGER; TYPE Small = SET OF [0..7]; VAR ExitCode, i, sum : INTEGER; VAR x : R; VAR y : A; VAR v : Vec; VAR s : Small; VAR r : REAL; VAR t : ARRAY [0..2] OF CHAR; BEGIN x := 5; y := x; (* 0+10+20+30+40 = 100 *) sum := 0; FOR i := 0 TO 4 DO v[i] := i * K; sum := sum + v[i] END; sum := sum + y - 5; (* {1,3,5}+{3,4} = {1,3,4,5}; 4 IN -> 101 *) s := {1, 3, 5} + {3, 4}; IF 4 IN s THEN sum := sum + 1 END; (* "abc"; t[1] = 'b' -> 103 *) t := "abc"; IF t[1] = 'b' THEN sum := sum + 2 END; (* 103/4+0.5 = 26.25 > 25 -> 113 *) r := sum; r := r / 4.0 + 0.5; IF r > 25.0 THEN sum := sum + 10 END; (* {1,3,4,5}-{4,5} = {1,3} -> +100 = 213 *) s := s - {4, 5}; IF (1 IN s) AND NOT (4 IN s) THEN sum := sum + 100 END; (* 213 MOD 3 = 0 -> +7 = 220 *) CASE sum MOD 3 OF 0 : sum := sum + 7 | 1..2 : sum := sum + 70 ELSE sum := sum + 700 END; (* down to 215 *) WHILE sum > 215 DO sum := sum - 1 END; (* up to 217 *) REPEAT sum := sum + 1 UNTIL sum >= 217; (* up to 219 *) LOOP IF sum >= 219 THEN EXIT END; sum := sum + 1 END; IF (sum = 219) AND (t[0] = 'a') THEN ExitCode := sum ELSE ExitCode := 0 END END Showcase7.