Paster Fob писал(а):Зацените.
В целом неплохо, по крайней мере, работает  

  Несколько замечаний и советов по мелочи.
1. Мне больше нравится, когда глобальные имена (процедуры, переменные) начинаются с большой буквы. А то, что составлено из нескольких слов, тоже выделяется: "AngleMax" вместо "anglemax". Компилятору всё равно, но так легче читается.
2. Это объявление:
function anglemax(var max:byte; const amax:byte):boolean ;можно заменить таким:
function anglemax(var max:byte; amax:byte):boolean ;Дело в том, что параметры по ссылкам VAR и CONST -- это на самом деле указатели, хоть и неявные. Доступ к параметрам через указатели всегда немного медленней, чем напрямую. И код немного длиннее. Мелочь, но на будущее знайте.
Paster Fob писал(а):Сравнил,в вашем варианте мне не нравится то,что углы ограды пустые.
Да, точно, есть небольшие дыры, где худой котяра пролезет. Их можно заткнуть, удлинив верх и низ:
- Код: Выделить всё
- { Задача 49-Г -- Садовая ограда }
 
 const CX=60;   CY=20;  { ширина и высота поля }
 
 type  TField = array [1..CX, 1..CY] of Char;
 
 var Field : TField;
 
 { Посадка деревьев }
 procedure MakeGarden(N: integer);
 var i, x, y: integer;
 begin
 FillChar(Field, SizeOf(Field),'.');
 for i:=1 to N do begin
 x:= 1 + Random(CX);
 y:= 1 + Random(CY);
 Field[x,y]:= '*';
 end;
 end;
 
 { Показ поля }
 procedure ExpoGarden;
 var x, y: integer;
 begin
 for y:=1 to CY do begin
 for x:=1 to CX do Write(Field[x,y]);
 Writeln;
 end;
 end;
 
 { Исследование сада }
 procedure ScanGarden(var Xmin, Ymin, Xmax, Ymax : integer);
 var x, y: integer;
 begin
 Xmin:= CX+1;  Ymin:= CY+1;
 Xmax:= 0;     Ymax:= 0;
 for x:=1 to CX do
 for y:=1 to CY do
 if Field[x,y]='*' then begin
 if XMin>x then XMin:=x;
 if YMin>y then YMin:=y;
 if XMax<x then XMax:=x;
 if YMax<y then YMax:=y;
 end;
 end;
 
 { Постройка ограды }
 procedure MakeRail(Xmin, Ymin, Xmax, Ymax : integer);
 const CRail='#';
 var x, y: integer;
 begin
 { сверху }
 if YMin>1  then for x:=XMin-Ord(XMin>1) to XMax+Ord(XMax<CX)
 do Field[x,Ymin-1]:= CRail;
 { снизу }
 if YMax<CY then for x:=XMin-Ord(XMin>1) to XMax+Ord(XMax<CX)
 do Field[x,Ymax+1]:= CRail;
 { слева }
 if XMin>1  then for y:=YMin to YMax
 do Field[XMin-1,y]:= CRail;
 { справа }
 if XMax<CX then for y:=YMin to YMax
 do Field[XMax+1,y]:= CRail;
 end;
 
 var Xmin, Ymin, Xmax, Ymax : integer;  { координаты углов ограды }
 
 begin
 Randomize;
 MakeGarden(8);
 ScanGarden(Xmin, Ymin, Xmax, Ymax);
 ExpoGarden;
 Readln;
 MakeRail(Xmin, Ymin, Xmax, Ymax);
 ExpoGarden;
 Readln;
 end.
 
);