Listing: PATRAT.PAS 
program patrat; 
 type tabl=array[1..100,1..100]of Byte; 
 var jum,dim,n,i,j,k:Integer; 
 a:tabl; 
 f:Text; 
 procedure afisare(a:tabl;dim:Integer); 
 var i,j:Integer; 
 
begin  
 Assign(f,'patrat.out'); 
 Rewrite(f); 
  for i:=1 to dim 
do  
  
begin  
 for j:=1 to dim do Write(f,a[i,j],' '); 
 Writeln(f) 
 end; 
 Close(f) 
 end; 
 
 Begin 
 Assign(f,'patrat.in'); Reset(f); 
 Readln(f,n); 
 Close(f); 
  for i:=1 to 100 
do  
 for j:=1 to 100 do a[i,j]:=1; 
  if n mod 2=0 
 
then  
  
begin  
 dim:=n div 2; 
 k:=1; 
 for i:=1 to dim do 
 
begin  
 Inc(k); 
 a[i,dim]:=k 
 end; 
 Dec(k); 
 for i:=1 to dim do 
 
begin  
 Inc(k); a[dim,i]:=k 
 end; 
 afisare(a,dim) 
 end 
 else 
 begin 
 dim:=n-3; 
 jum:=dim div 2; 
 for i:=1 to jum do 
 for j:=jum+1 to dim do a[j,i]:=2; 
 for i:=jum+1 to dim do 
 for j:=1 to jum do a[j,i]:=3; 
 for i:=jum+1 to dim-1 do 
 for j:=jum+1 to dim-1 do a[i,j]:=4; 
 k:=4; 
 for i:=jum+1 to dim do 
 begin Inc(k); a[i,dim]:=k end; 
 for i:=jum+1 to dim-1 do 
 begin Inc(k); a[dim,i]:=k end; 
 afisare(a,dim) 
 end 
 End. 

[cuprins]