52 lines
1.1 KiB
Text
52 lines
1.1 KiB
Text
$ include "seed7_05.s7i";
|
|
|
|
const type: matrix is array array integer;
|
|
|
|
const func matrix: spiral (in integer: n) is func
|
|
result
|
|
var matrix: myArray is matrix.value;
|
|
local
|
|
var integer: i is 0;
|
|
var integer: dx is 1;
|
|
var integer: dy is 0;
|
|
var integer: x is 1;
|
|
var integer: y is 1;
|
|
var integer: nx is 0;
|
|
var integer: ny is 0;
|
|
var integer: swap is 0;
|
|
begin
|
|
myArray := n times n times 0;
|
|
for i range 1 to n**2 do
|
|
myArray[x][y] := i;
|
|
nx := x + dx;
|
|
ny := y + dy;
|
|
if nx >= 1 and nx <= n and ny >= 1 and ny <= n and myArray[nx][ny] = 0 then
|
|
x := nx;
|
|
y := ny;
|
|
else
|
|
swap := dx;
|
|
dx := -dy;
|
|
dy := swap;
|
|
x +:= dx;
|
|
y +:= dy;
|
|
end if;
|
|
end for;
|
|
end func;
|
|
|
|
const proc: writeMatrix (in matrix: myArray) is func
|
|
local
|
|
var integer: x is 0;
|
|
var integer: y is 0;
|
|
begin
|
|
for key y range myArray do
|
|
for key x range myArray[y] do
|
|
write(myArray[x][y] lpad 4);
|
|
end for;
|
|
writeln;
|
|
end for;
|
|
end func;
|
|
|
|
const proc: main is func
|
|
begin
|
|
writeMatrix(spiral(5));
|
|
end func;
|