uses crt; const width =3; var square : array [1..width,1..width] of byte; x,y,i,j : integer; max_x, min_x, max_y, min_y : integer; function walk_right:boolean; begin while (x<=width) do begin if (x=max_x) then begin writeln; walk_right:=true; inc(max_x); exit; end; write(square[y,x]:4); inc(x); end; walk_right:=false; end; function walk_bottom:boolean; begin while (y<=width) do begin if (y=max_y) then begin walk_bottom:=true; inc(max_y); exit; end; write(square[y,x]:4); inc(y); end; walk_bottom:=false; end; function walk_left:boolean; begin while (x>=1) do begin if (x=min_x) then begin walk_left:=true; dec(min_x); exit; end; write(square[y,x]:4); dec(x); end; walk_left:=false; end; function walk_top:boolean; begin while (y>=1) do begin if (y=min_y) then begin walk_top:=true; dec(min_y); exit; end; write(square[y,x]:4); dec(y); end; walk_top:=false; end; begin clrscr; for i:=1 to width do begin for j:=1 to width do begin square[i,j]:=(i-1)*width+j; write(square[i,j]:4); end; writeln; end; writeln; x:= (width div 2)+1; y:= (width div 2)+1; max_x:=x+1; min_x:=x-1; max_y:=y+1; min_y:=y-1; while true do begin if not walk_right then break; if not walk_bottom then break; if not walk_left then break; if not walk_top then break; end; readkey; end.