showcase7.mod 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. MODULE Showcase7;
  2. // Complete tour at v3-step3.3: CONSTs, subranges, aliases, arrays,
  3. // strings, sets, REALs, all statements. Expected ExitCode: 219.
  4. CONST K = 10;
  5. TYPE R = [0..20];
  6. TYPE A = INTEGER;
  7. TYPE Vec = ARRAY [0..4] OF INTEGER;
  8. TYPE Small = SET OF [0..7];
  9. VAR ExitCode, i, sum : INTEGER;
  10. VAR x : R;
  11. VAR y : A;
  12. VAR v : Vec;
  13. VAR s : Small;
  14. VAR r : REAL;
  15. VAR t : ARRAY [0..2] OF CHAR;
  16. BEGIN
  17. x := 5; y := x;
  18. (* 0+10+20+30+40 = 100 *)
  19. sum := 0;
  20. FOR i := 0 TO 4 DO v[i] := i * K; sum := sum + v[i] END;
  21. sum := sum + y - 5;
  22. (* {1,3,5}+{3,4} = {1,3,4,5}; 4 IN -> 101 *)
  23. s := {1, 3, 5} + {3, 4};
  24. IF 4 IN s THEN sum := sum + 1 END;
  25. (* "abc"; t[1] = 'b' -> 103 *)
  26. t := "abc";
  27. IF t[1] = 'b' THEN sum := sum + 2 END;
  28. (* 103/4+0.5 = 26.25 > 25 -> 113 *)
  29. r := sum;
  30. r := r / 4.0 + 0.5;
  31. IF r > 25.0 THEN sum := sum + 10 END;
  32. (* {1,3,4,5}-{4,5} = {1,3} -> +100 = 213 *)
  33. s := s - {4, 5};
  34. IF (1 IN s) AND NOT (4 IN s) THEN sum := sum + 100 END;
  35. (* 213 MOD 3 = 0 -> +7 = 220 *)
  36. CASE sum MOD 3 OF
  37. 0 : sum := sum + 7
  38. | 1..2 : sum := sum + 70
  39. ELSE sum := sum + 700
  40. END;
  41. (* down to 215 *)
  42. WHILE sum > 215 DO sum := sum - 1 END;
  43. (* up to 217 *)
  44. REPEAT sum := sum + 1 UNTIL sum >= 217;
  45. (* up to 219 *)
  46. LOOP
  47. IF sum >= 219 THEN EXIT END;
  48. sum := sum + 1
  49. END;
  50. IF (sum = 219) AND (t[0] = 'a') THEN ExitCode := sum
  51. ELSE ExitCode := 0
  52. END
  53. END Showcase7.