48 lines
1.1 KiB
Plaintext
48 lines
1.1 KiB
Plaintext
|
(*
|
||
|
adapted to Oberon-07 by 0CodErr, KolibriOS team
|
||
|
*)
|
||
|
(* ********* Zonnon online collection ***********
|
||
|
* Magic Squares
|
||
|
*
|
||
|
* This example is a part of Prof. Nikalus Wirth's book
|
||
|
* www.zonnon.ethz.ch/usergroup
|
||
|
* (c) ETH Zurich
|
||
|
*)
|
||
|
|
||
|
MODULE MagicSquares; (*NW 11.8.97*)
|
||
|
|
||
|
IMPORT In, Out, Console;
|
||
|
|
||
|
|
||
|
PROCEDURE Generate; (*magic square of order 3, 5, 7, ... *)
|
||
|
VAR
|
||
|
i, j, x, nx, nsq, n: INTEGER;
|
||
|
M: ARRAY 13, 13 OF INTEGER;
|
||
|
|
||
|
BEGIN
|
||
|
Out.String("Enter magic square order(3, 5, 7, ..., 13): "); In.Int(n); nsq := n * n; x := 0;
|
||
|
i := n DIV 2; j := n - 1;
|
||
|
WHILE x < nsq DO
|
||
|
nx := n + x; j := (j - 1) MOD n; INC(x);
|
||
|
Out.Int(i, 1); Out.Char(9X);
|
||
|
Out.Int(j, 1); Out.Ln;
|
||
|
M[i, j] := x;
|
||
|
WHILE x < nx DO
|
||
|
i := (i + 1) MOD n; j := (j + 1) MOD n;
|
||
|
INC(x); M[i, j] := x
|
||
|
END
|
||
|
END;
|
||
|
FOR i := 0 TO n - 1 DO
|
||
|
FOR j := 0 TO n - 1 DO Out.Int(M[i, j], 6) END;
|
||
|
Out.Ln
|
||
|
END
|
||
|
END Generate;
|
||
|
|
||
|
BEGIN
|
||
|
Console.open;
|
||
|
|
||
|
Generate;
|
||
|
Out.String("Press Enter to continue"); In.Ln;
|
||
|
|
||
|
Console.exit(TRUE)
|
||
|
END MagicSquares.
|