jONES1979 Цитата: Массив надо заполнить, числами, начиная с 1 заканчивая N^2 в порядке (как бы это выразиться?) спирали, направленной по часовой стрелке.
Решил
[more]
Код: uses crt;
const n=5;
type t_d = array [0..3] of record
x: shortint;
y: shortint;
end;
const d: t_d = ((x:1; y:0), (x:0; y:1), (x:-1; y:0), (x:0; y:-1));
var mas: array [0..n-1,0..n-1] of integer;
len,R,x,y,i,j,p,k,step:integer;
begin
len:=trunc(ln(n*n)/ln(10))+1;
{len-skolko cifr otvoditsia pod kajdoe choslo pri vivode na ekran}
clrscr;
x:=0; y:=0;
i:=1;
R:=n-1;
for k:=0 to trunc(n/2)-1 do {k-nomer kolca, k=0-samoe vneshnee}
begin
{x:=k; y:=k; mas[k,k]:=i}
step:=0;
mas[x,y]:=i;
i:=i+1;
p:=4*R-1; {skolko elementov esche ostalos na etom kolce}
for j:=1 to p do
begin
x:=x+d[step].x;
y:=y+d[step].y;
mas[x,y]:=i; {x-stolbec, y-stroka}
i:=i+1;
if (j mod R=0) then
step:=step+1;
end;
x:=x+d[0].x;
y:=y+d[0].y;
R:=R-2;
end;
if (R=0) then mas[x,y]:=i; {R budet=0 esli 'n' bilo nechetnoe=>
poslednee kolco sostoit iz odnogo elementa;
vmesto etogo 'if' mojno izmenit' cikl na
for k:=0 to trunc(n/2)-1+(n mod 2) }
for x:=0 to n-1 do
begin
for y:=0 to n-1 do
write(mas[y,x] :len,' ');
writeln;
end;
readln;
end.