Ошибка в построении - Pascal ABC (12616)
Формулировка задачи:
Прошу помочь. В чем ошибка? Программа утолщает линии, а нужно, чтобы она самостоятельно строила такие же деревья независимо от месторасположения.
Листинг программы
- Program RA_EXAM;
- uses VCL, utils;
- var MainForm: Form;
- e: PaintBox;
- P: Panel;
- i,x,y: integer;
- l: textlabel;
- se,se1: SpinEdit;
- b1,b2 : Button;
- A1,A2 :integer;
- const XX = 640;
- YY = 500;
- procedure read_file;
- var t:text;
- begin
- end;
- procedure Draw;
- var i,x,y: integer;
- begin
- read_file;
- e.Pen.Width:= se1.Value;
- //небо
- if A1 = 1 then A1:= clAqua
- else A1:= clBlue;
- e.Pen.Color:= A1;
- e.Brush.Color:=A1;
- e.Brush.Style:=bsSolid;
- e.rectangle(0,0,640,480);
- //трава
- e.Pen.Color:=clGreen;
- e.Brush.Color:=clGreen;
- e.Brush.Style:=bsSolid;
- e.Circle(250, 670, 400);
- e.Circle(550, 570, 300);
- //деревья
- e.Pen.Color:=clBlack;
- e.Brush.Color:=clBlack;
- e.Brush.Style:=bsSolid;
- e.rectangle(400, 250, 420, 350);
- e.Pen.Color:=clGreen;
- e.Brush.Color:=clGreen;
- e.Brush.Style:=bsSolid;
- e.Circle(400, 260, 30);
- e.Circle(420, 260, 30);
- e.Circle(390, 240, 30);
- e.Circle(430, 240, 30);
- e.Circle(410, 220, 30);
- end;
- procedure B1Click;
- begin
- MainForm.Close;
- end;
- procedure B2Click;
- begin
- execute('hh.exe help.chm');
- end;
- BEGIN
- read_file;
- MainForm:=Form.Create (350,200,XX+120,YY);
- MainForm.Caption:=' ';
- p:=Panel.Create;
- p.Width:=120;
- p.Align:=alLeft;
- B1:=Button.Create (p,0,YY-90,p.Width,40);
- B1.Caption:='Закрыть программу';
- B1.OnClick:=b1Click;
- l:=TextLabel.Create(p,10,70,'Количество: ');
- se1:=SpinEdit.Create(p,20,95,60,20);
- se1.Min:=1;
- se1.Max:=10;
- se1.Value:=A2;
- B2:=Button.Create (p,0,YY-125,p.Width,25);
- B2.Caption:='Справка';
- B2.OnClick:=B2Click;
- e:=PaintBox.Create(p.width,0,screen.width,screen.height);
- Draw;
- se1.OnChange:=Draw;
- end.
Решение задачи: «Ошибка в построении»
textual
Листинг программы
- var k:integer;
- ........................
- procedure Tree;
- //деревья
- begin
- if (se1.value>k)and(k<8) then
- begin
- e.Pen.Color:=clBlack;
- e.Brush.Color:=clBlack;
- e.Brush.Style:=bsSolid;
- x:=x+75;
- repeat
- y:=300+random(200);
- until e.GetPixel(x,y)=clGreen;
- e.rectangle(x-10, y-100, x+10, y);
- e.Pen.Color:=clGreen;
- e.Brush.Color:=clGreen;
- e.Brush.Style:=bsSolid;
- e.Circle(x, y-90, 30);
- e.Circle(x+20, y-90, 30);
- e.Circle(x-10, y-110, 30);
- e.Circle(x+30, y-110, 30);
- e.Circle(x+10, y-130, 30);
- k:=se1.value;
- end;
- end;
Объяснение кода листинга программы
- Переменная k объявлена как integer.
- Создается процедура Tree.
- Выполняется проверка условия: если значение переменной se1 больше k и k меньше 8, то цвет кисти и прямоугольника меняется на черный.
- Вычисляется значение x, увеличивается на 75.
- Выполняется цикл, пока не будет найден зеленый цвет на пикселе.
- Показывается прямоугольник с шириной и высотой, определенными значениями x и y.
- Цвет кисти и прямоугольника меняется на зеленый.
- Вычисляется значение y, увеличивается на 100 случайным образом.
- Повторяется шаг 5 до тех пор, пока не будет найден зеленый цвет на пикселе.
- Показывается прямоугольник с шириной и высотой, определенными значениями x и y.
- Цвет кисти и прямоугольника меняется на зеленый.
- Вычисляется значение x, увеличивается на 100 случайным образом.
- Вычисляется значение y, увеличивается на 110 случайным образом.
- Показывается окружность с радиусом 30 пикселей в точке (x, y).
- Показывается окружность с радиусом 30 пикселей в точке (x+20, y).
- Показывается окружность с радиусом 30 пикселей в точке (x-10, y).
- Показывается окружность с радиусом 30 пикселей в точке (x+30, y).
- Показывается окружность с радиусом 30 пикселей в точке (x+10, y-130).
- Значение k устанавливается равным значению переменной se1.
- Код завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д