Ошибка в построении - Pascal ABC (12616)

Узнай цену своей работы

Формулировка задачи:

Прошу помочь. В чем ошибка? Программа утолщает линии, а нужно, чтобы она самостоятельно строила такие же деревья независимо от месторасположения.
Листинг программы
  1. Program RA_EXAM;
  2. uses VCL, utils;
  3. var MainForm: Form;
  4. e: PaintBox;
  5. P: Panel;
  6. i,x,y: integer;
  7. l: textlabel;
  8. se,se1: SpinEdit;
  9. b1,b2 : Button;
  10. A1,A2 :integer;
  11. const XX = 640;
  12. YY = 500;
  13. procedure read_file;
  14. var t:text;
  15. begin
  16. end;
  17. procedure Draw;
  18. var i,x,y: integer;
  19. begin
  20. read_file;
  21. e.Pen.Width:= se1.Value;
  22. //небо
  23. if A1 = 1 then A1:= clAqua
  24. else A1:= clBlue;
  25. e.Pen.Color:= A1;
  26. e.Brush.Color:=A1;
  27. e.Brush.Style:=bsSolid;
  28. e.rectangle(0,0,640,480);
  29. //трава
  30. e.Pen.Color:=clGreen;
  31. e.Brush.Color:=clGreen;
  32. e.Brush.Style:=bsSolid;
  33. e.Circle(250, 670, 400);
  34. e.Circle(550, 570, 300);
  35. //деревья
  36. e.Pen.Color:=clBlack;
  37. e.Brush.Color:=clBlack;
  38. e.Brush.Style:=bsSolid;
  39. e.rectangle(400, 250, 420, 350);
  40. e.Pen.Color:=clGreen;
  41. e.Brush.Color:=clGreen;
  42. e.Brush.Style:=bsSolid;
  43. e.Circle(400, 260, 30);
  44. e.Circle(420, 260, 30);
  45. e.Circle(390, 240, 30);
  46. e.Circle(430, 240, 30);
  47. e.Circle(410, 220, 30);
  48. end;
  49.  
  50. procedure B1Click;
  51. begin
  52. MainForm.Close;
  53. end;
  54. procedure B2Click;
  55. begin
  56. execute('hh.exe help.chm');
  57. end;
  58.  
  59. BEGIN
  60. read_file;
  61. MainForm:=Form.Create (350,200,XX+120,YY);
  62. MainForm.Caption:=' ';
  63. p:=Panel.Create;
  64. p.Width:=120;
  65. p.Align:=alLeft;
  66. B1:=Button.Create (p,0,YY-90,p.Width,40);
  67. B1.Caption:='Закрыть программу';
  68. B1.OnClick:=b1Click;
  69. l:=TextLabel.Create(p,10,70,'Количество: ');
  70. se1:=SpinEdit.Create(p,20,95,60,20);
  71. se1.Min:=1;
  72. se1.Max:=10;
  73. se1.Value:=A2;
  74. B2:=Button.Create (p,0,YY-125,p.Width,25);
  75. B2.Caption:='Справка';
  76. B2.OnClick:=B2Click;
  77. e:=PaintBox.Create(p.width,0,screen.width,screen.height);
  78. Draw;
  79. se1.OnChange:=Draw;
  80. end.

Решение задачи: «Ошибка в построении»

textual
Листинг программы
  1. var k:integer;
  2. ........................
  3. procedure Tree;
  4. //деревья
  5. begin
  6. if (se1.value>k)and(k<8) then
  7. begin
  8. e.Pen.Color:=clBlack;
  9. e.Brush.Color:=clBlack;
  10. e.Brush.Style:=bsSolid;
  11. x:=x+75;
  12. repeat
  13. y:=300+random(200);
  14. until e.GetPixel(x,y)=clGreen;
  15. e.rectangle(x-10, y-100, x+10, y);
  16. e.Pen.Color:=clGreen;
  17. e.Brush.Color:=clGreen;
  18. e.Brush.Style:=bsSolid;
  19. e.Circle(x, y-90, 30);
  20. e.Circle(x+20, y-90, 30);
  21. e.Circle(x-10, y-110, 30);
  22. e.Circle(x+30, y-110, 30);
  23. e.Circle(x+10, y-130, 30);
  24. k:=se1.value;
  25. end;
  26. end;

Объяснение кода листинга программы

  1. Переменная k объявлена как integer.
  2. Создается процедура Tree.
  3. Выполняется проверка условия: если значение переменной se1 больше k и k меньше 8, то цвет кисти и прямоугольника меняется на черный.
  4. Вычисляется значение x, увеличивается на 75.
  5. Выполняется цикл, пока не будет найден зеленый цвет на пикселе.
  6. Показывается прямоугольник с шириной и высотой, определенными значениями x и y.
  7. Цвет кисти и прямоугольника меняется на зеленый.
  8. Вычисляется значение y, увеличивается на 100 случайным образом.
  9. Повторяется шаг 5 до тех пор, пока не будет найден зеленый цвет на пикселе.
  10. Показывается прямоугольник с шириной и высотой, определенными значениями x и y.
  11. Цвет кисти и прямоугольника меняется на зеленый.
  12. Вычисляется значение x, увеличивается на 100 случайным образом.
  13. Вычисляется значение y, увеличивается на 110 случайным образом.
  14. Показывается окружность с радиусом 30 пикселей в точке (x, y).
  15. Показывается окружность с радиусом 30 пикселей в точке (x+20, y).
  16. Показывается окружность с радиусом 30 пикселей в точке (x-10, y).
  17. Показывается окружность с радиусом 30 пикселей в точке (x+30, y).
  18. Показывается окружность с радиусом 30 пикселей в точке (x+10, y-130).
  19. Значение k устанавливается равным значению переменной se1.
  20. Код завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут