Длинный оптимизированный вариант:
{формируем первую строку}
for i := 1 to n do a[1, i] := 1;
{формируем вторую строку}
a[2, 1] := 1; a[2, n] := 1;
for i := 2 to n -1 do a[2, i] := 0;
{копируем первую строку в последнюю}
a[n] := a[1];
{копируем вторую строку в строки 3..n-1}
for i := 3 to n -1 do a[i] := a[2];
Самый короткий вариант, какой удалось придумать, работающий в стандартном Pascal:
for i := 1 to n do for j := 1 to n do a[i, j] := odr([i, j] * [1, n] <> []);
Подробности:
http://comp-science.narod.ru/Progr/mn.htm
Программа целиком:
var
a: array[1..255, 1..255] of integer;
i, j, n: integer;
begin
readln(n);
for i := 1 to n do begin
for j := 1 to n do begin
a[i, j] := odr([i, j] * [1, n] <> []);
write(a[i, j]: 2)
end;
writeln
end
end.