49 lines
921 B
Plaintext
49 lines
921 B
Plaintext
MODULE ZigZag EXPORTS Main;
|
|
|
|
IMPORT IO, Fmt;
|
|
|
|
TYPE Matrix = REF ARRAY OF ARRAY OF CARDINAL;
|
|
|
|
PROCEDURE Create(size: CARDINAL): Matrix =
|
|
PROCEDURE move(VAR i, j: INTEGER) =
|
|
BEGIN
|
|
IF j < (size - 1) THEN
|
|
IF (i - 1) < 0 THEN
|
|
i := 0;
|
|
ELSE
|
|
i := i - 1;
|
|
END;
|
|
INC(j);
|
|
ELSE
|
|
INC(i);
|
|
END;
|
|
END move;
|
|
|
|
VAR data := NEW(Matrix, size, size);
|
|
x, y: INTEGER := 0;
|
|
BEGIN
|
|
FOR v := 0 TO size * size - 1 DO
|
|
data[y, x] := v;
|
|
IF (x + y) MOD 2 = 0 THEN
|
|
move(y, x);
|
|
ELSE
|
|
move(x, y);
|
|
END;
|
|
END;
|
|
RETURN data;
|
|
END Create;
|
|
|
|
PROCEDURE Print(data: Matrix) =
|
|
BEGIN
|
|
FOR i := FIRST(data^) TO LAST(data^) DO
|
|
FOR j := FIRST(data[0]) TO LAST(data[0]) DO
|
|
IO.Put(Fmt.F("%3s", Fmt.Int(data[i, j])));
|
|
END;
|
|
IO.Put("\n");
|
|
END;
|
|
END Print;
|
|
|
|
BEGIN
|
|
Print(Create(5));
|
|
END ZigZag.
|