Оригинал статьи: http://www.cyberforum.ru/pascal/thread133142.html
Благодарен всем авторам, которые внесли свой вклад в сборку кода.
var a: array [1..100, 1..100] of integer; i, m, k, n: integer; begin writeln('Размерность массива ='); readln(n); k := 0; m := 0; repeat for i := m + 1 to n - m do begin inc(k); a[i, m + 1] := k; end; for i := m + 2 to n - m do begin inc(k); a[n - m, i] := k; end; for i := n - m - 1 downto m + 1 do begin inc(k); a[i, n - m] := k; end; for i := n - m - 1 downto m + 2 do begin inc(k); a[m + 1, i] := k; end; inc(m); until m + 1 = n div 2 + 2; for i := 1 to n do begin for k := 1 to n do write(a[i, k]:3, ' '); writeln; end; end.