Программа пишет, что выполняется, но ничего не выводит - PascalABC.NET

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

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

Нашёл код в интернете, решил полюбоваться. Данная программа должна выводить изображение сердца, но когда я её запускаю, пишет, что программа выполняется, хотя никакого вывода изображения нет. Может, код с двумя подключенными модулями как-то по особенному запускать надо? Подскажите пожалуйста, в чём проблема.

Листинг программы
  1. uses graphABC,crt;
  2. var dx,dy,xc,x1,y1:integer;
  3. begin
  4. hidecursor;
  5. setpencolor(clblue);
  6. setpenwidth(6);
  7. {1}line(300,300,150,150);
  8. {2}line(150,150,150,100);
  9. {3}line(150,100,180,80);
  10. {4}line(180,80,210,80);
  11. {5}line(210,80,300,130);
  12. {6}line(300,130,390,80);
  13. {7}line(390,80,420,80);
  14. {8}line(420,80,450,100);
  15. {9}line(450,100,450,150);
  16. {0}line(450,150,300,300);
  17. floodfill(190,130,clred);
  18. xc:=windowwidth div 2;
  19. repeat
  20. dy:=random(xc);
  21. y1:=dy;
  22. dx:=random(xc);
  23. x1:=dx;
  24. If GetPixel(x1,y1)=clRed then
  25. SetPixel(x1,y1,clblack);
  26. sleep(0);
  27. until keypressed;
  28. end.

Решение задачи: «Программа пишет, что выполняется, но ничего не выводит»

textual
Листинг программы
  1. uses graphABC;
  2.  
  3. var theEnd : Boolean := False;
  4.  
  5. procedure KeyPress(Key : Char);
  6. begin
  7.   theEnd := True;
  8. end;
  9.  
  10. procedure MouseUp(x,y,mb: integer);
  11. begin
  12.   theEnd := True;
  13. end;
  14.  
  15. procedure BlackPoint;
  16. begin
  17.   var dy := random(WindowHeight);
  18.   var dx := random(WindowWidth);
  19.  
  20.   var c := GetPixel(dx, dy);
  21.   if GetGreen(c) < 128 then
  22.     SetPixel(dx, dy, clblack)
  23.   else
  24.     SetPixel(dx, dy, clblue);
  25. end;
  26.  
  27. begin
  28.   setpencolor(clblue);
  29.   setpenwidth(6);
  30.   {1}line(300, 300, 150, 150);
  31.   {2}line(150, 150, 150, 100);
  32.   {3}line(150, 100, 180, 80);
  33.   {4}line(180, 80, 210, 80);
  34.   {5}line(210, 80, 300, 130);
  35.   {6}line(300, 130, 390, 80);
  36.   {7}line(390, 80, 420, 80);
  37.   {8}line(420, 80, 450, 100);
  38.   {9}line(450, 100, 450, 150);
  39.   {0}line(450, 150, 300, 300);
  40.   floodfill(190, 130, clred);
  41.  
  42.   OnKeyPress := KeyPress;
  43.   OnMouseUp := MouseUp;
  44.  
  45.   var dt := System.DateTime.Now;
  46.   repeat
  47.     BlackPoint;
  48.    
  49.     if (system.datetime.Now-dt).TotalMilliseconds > 100 then
  50.       begin
  51.         dt := System.Datetime.Now;
  52.         Redraw;
  53.       end;
  54.   until theEnd;
  55.  
  56.   Window.Close;
  57. end.

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

  1. Объявлена переменная theEnd типа Boolean, которая инициализируется значением False.
  2. Создана процедура KeyPress, которая принимает в качестве параметра символ Key. В этой процедуре значение переменной theEnd устанавливается в True.
  3. Создана процедура MouseUp, которая принимает в качестве параметров координаты x, y и mb. В этой процедуре значение переменной theEnd устанавливается в True.
  4. Создана процедура BlackPoint, которая выбирает случайные координаты на экране и, если значение зелёного канала цвета пикселя меньше 128, закрашивает этот пиксель чёрным цветом, иначе закрашивает синим.
  5. Начальные координаты для линий и прямоугольника задаются с помощью функций line и floodfill соответственно. Значение переменной theEnd устанавливается в True.
  6. Задаются функции обратного вызова для обработчиков нажатия клавиш и отпускания кнопки мыши.
  7. Задаётся начальное время в миллисекундах с помощью функции System.DateTime.Now.
  8. В цикле repeat, который выполняется до тех пор, пока не будет выполнено условие, указанное в операторе until, вызывается функция BlackPoint. Если прошло больше 100 миллисекунд с момента последнего обновления экрана, то выполняется функция Redraw, которая обновляет экран. Значение переменной theEnd устанавливается в True.
  9. Закрывается окно программы с помощью функции Window.Close.

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


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

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

8   голосов , оценка 4.25 из 5

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

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

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