Nie jestem za gotowcami, ale ten program jest tak bardzo zrozumiały, że zamieszczę. Oto on:
uses Crt;
const xMax =6;
yMax =5;
var Tab : array[1..xMax, 1..yMax] of LONGINT;
i, j,
iter : BYTE;
k : LONGINT;
begin
ClrScr;
i :=1;
j :=1;
k :=1;
iter :=1;
while (i <=xMax) and (j <=yMax) do {póki nie doszliśmy do końca tablicy}
begin
Tab [i, j] :=k;
Inc (k);
case iter of
1: if j <yMax then Inc (j) else Inc (i); {idziemy w dół - ew. w prawo}
2: begin
while (j >1) and (i <xMax) do {idziemy w górę-prawo}
begin
Dec (j);
Inc (i);
Tab [i,j] :=k;
Inc (k);
end;
Dec (k);
end;
3: if i <xMax then Inc (i) else Inc (j); {idziemy w prawo - ew. w dół}
4: begin
while (j <yMax) and (i >1) do {idziemy w dół-lewo}
begin
Inc (j);
Dec (i);
Tab [i,j] :=k;
Inc (k);
end;
Dec (k);
end;
end;
iter :=iter mod 4 +1;
end;
for j :=1 to yMax do
begin
for i :=1 to xMax do Write (Tab [i, j]:5);
Writeln;
end; {wyświetlenie tablicy}
ReadKey;
end.
Oczywiście można go nieco usprawnić, ale wcale się nad tym nie zastanawiałem - to tylko szkic.
yMax i xMax to rozmiary tablicy - mogą być dowolne.
Pozdrawiam.