t_nestidx.mod 805 B

123456789101112131415161718192021222324252627282930
  1. MODULE TNestIdx;
  2. // Nested arrays: a[i][j] and a[i, j] loads/stores, and passing a
  3. // nested-array element (a row) to an open-array formal. Exit 42.
  4. TYPE Row = ARRAY [0..3] OF INTEGER;
  5. TYPE Mat = ARRAY [0..2] OF Row;
  6. VAR m : Mat;
  7. VAR ExitCode : INTEGER;
  8. VAR i, j, total : INTEGER;
  9. PROCEDURE Sum(r : ARRAY OF INTEGER) : INTEGER;
  10. VAR k, s : INTEGER;
  11. BEGIN
  12. s := 0;
  13. FOR k := 0 TO HIGH(r) DO s := s + r[k] END;
  14. RETURN s
  15. END Sum;
  16. BEGIN
  17. FOR i := 0 TO 2 DO
  18. FOR j := 0 TO 3 DO m[i][j] := i + j END
  19. END;
  20. (* row sums: 6, 10, 14 -> 30 *)
  21. total := Sum(m[0]) + Sum(m[1]) + Sum(m[2]);
  22. (* diagonal: 0 + 2 + 4 = 6 -> 36 *)
  23. total := total + m[0][0] + m[1][1] + m[2][2];
  24. (* comma form: m[1,3] + m[2,0] = 4 + 2 = 6 -> 42 *)
  25. total := total + m[1, 3] + m[2, 0];
  26. ExitCode := total
  27. END TNestIdx.