| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- 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.
|