Изобразить на экране работающие электронные часы с цифровым индикатором - Pascal

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

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

Электронные часы. Изобразить на экране работающие электронные с цифровым индикатором (каждая цифра изображается на 7-сегментном шаблоне). При недопустимости встроенного таймера ЭВМ реализовать его с помощью настроенных циклов, задавая стартовое время при запуске программы. (В паскале).

Решение задачи: «Изобразить на экране работающие электронные часы с цифровым индикатором»

textual
Листинг программы
  1. uses graphABC;
  2. var h,m,s,Xc,Yc,c1,c2,c3,c4,c5,c6:integer;
  3. //прорисовка цифр
  4. procedure Zero(xn,yn:integer);
  5. begin
  6.   Rectangle(0+xn,0+yn,5+xn,10+yn);
  7. end;
  8. procedure One(xn,yn:integer);
  9. begin
  10.   Line(5+xn,0+yn,5+xn,10+yn);
  11. end;
  12. procedure Two(xn,yn:integer);
  13. begin
  14.   Line(0+xn,0+yn,5+xn,0+yn);
  15.   Line(5+xn,0+yn,5+xn,5+yn);
  16.   Line(5+xn,5+yn,0+xn,5+yn);
  17.   Line(0+xn,5+yn,0+xn,10+yn);
  18.   Line(0+xn,10+yn,5+xn,10+yn);
  19. end;
  20. procedure Three(xn,yn:integer);
  21. begin
  22.   Line(0+xn,0+yn,5+xn,0+yn);
  23.   Line(5+xn,0+yn,5+xn,5+yn);
  24.   Line(5+xn,5+yn,0+xn,5+yn);
  25.   Line(5+xn,5+yn,5+xn,10+yn);
  26.   Line(0+xn,10+yn,5+xn,10+yn);
  27. end;
  28. procedure Fouhr(xn,yn:integer);
  29. begin
  30.   Line(0+xn,0+yn,0+xn,5+yn);
  31.   Line(5+xn,0+yn,5+xn,5+yn);
  32.   Line(5+xn,5+yn,0+xn,5+yn);
  33.   Line(5+xn,5+yn,5+xn,10+yn);
  34. end;
  35. procedure Five(xn,yn:integer);
  36. begin
  37.   Line(0+xn,0+yn,5+xn,0+yn);
  38.   Line(0+xn,0+yn,0+xn,5+yn);
  39.   Line(5+xn,5+yn,0+xn,5+yn);
  40.   Line(5+xn,5+yn,5+xn,10+yn);
  41.   Line(0+xn,10+yn,5+xn,10+yn);
  42. end;
  43. procedure Six(xn,yn:integer);
  44. begin
  45.   Line(0+xn,0+yn,5+xn,0+yn);
  46.   Line(0+xn,0+yn,0+xn,5+yn);
  47.   Line(5+xn,5+yn,0+xn,5+yn);
  48.   Line(5+xn,5+yn,5+xn,10+yn);
  49.   Line(0+xn,10+yn,5+xn,10+yn);
  50.   Line(0+xn,5+yn,0+xn,10+yn);
  51. end;
  52. procedure Seven(xn,yn:integer);
  53. begin
  54.   Line(0+xn,0+yn,5+xn,0+yn);
  55.   Line(5+xn,0+yn,5+xn,10+yn);
  56. end;
  57. procedure Eight(xn,yn:integer);
  58. begin
  59.   Rectangle(0+xn,0+yn,5+xn,10+yn);
  60.   Line(0+xn,5+yn,5+xn,5+yn);
  61. end;
  62. procedure Nine(xn,yn:integer);
  63. begin
  64.   Line(0+xn,0+yn,5+xn,0+yn);
  65.   Line(5+xn,0+yn,5+xn,5+yn);
  66.   Line(5+xn,5+yn,0+xn,5+yn);
  67.   Line(5+xn,5+yn,5+xn,10+yn);
  68.   Line(0+xn,10+yn,5+xn,10+yn);
  69.   Line(0+xn,0+yn,0+xn,5+yn);
  70. end;
  71. //выбор нужной цифры
  72. procedure Number(n,xn,yn:integer);
  73. begin
  74.   case n of
  75.     0:Zero(xn,yn);
  76.     1:One(xn,yn);
  77.     2:Two(xn,yn);
  78.     3:Three(xn,yn);
  79.     4:Fouhr(xn,yn);
  80.     5:Five(xn,yn);
  81.     6:Six(xn,yn);
  82.     7:Seven(xn,yn);
  83.     8:Eight(xn,yn);
  84.     9:Nine(xn,yn);
  85.   end;
  86. end;
  87. //рисование каркаса}
  88. procedure KarkasElectro;
  89. begin
  90.   Rectangle(Xc-40,Yc-15,Xc+36,Yc+15);
  91.   setpixel(Xc-40+25,Yc-3,clGreen);
  92.   setpixel(Xc-40+25,Yc+3,clGreen);
  93.   setpixel(Xc-40+50,Yc-3,clGreen);
  94.   setpixel(Xc-40+50,Yc+3,clGreen);
  95. end;
  96. //рисование нужных цифр
  97. procedure DrawElectro;
  98. begin
  99.   if s=60 then
  100.    begin
  101.     s:=0;
  102.     m:=m+1;
  103.    end;
  104.   if m=60 then
  105.    begin
  106.     s:=0;
  107.     m:=0;
  108.     h:=h+1;
  109.    end;
  110.   if h=24 then
  111.    begin
  112.     s:=0;
  113.     m:=0;
  114.     h:=0;
  115.    end;
  116.   c1:=h div 10;
  117.   c2:=h mod 10;
  118.   c3:=m div 10;
  119.   c4:=m mod 10;
  120.   c5:=s div 10;
  121.   c6:=s mod 10;
  122.   SetPenColor(clGreen);
  123.   Number(c1,Xc-40+5,Yc-15+10);
  124.   Number(c2,Xc-40+15,Yc-15+10);
  125.   Number(c3,Xc-40+30,Yc-15+10);
  126.   Number(c4,Xc-40+40,Yc-15+10);
  127.   Number(c5,Xc-40+55,Yc-15+10);
  128.   Number(c6,Xc-40+65,Yc-15+10);
  129. end;
  130. begin
  131. repeat
  132. writeln('Введите начальное время, часы от 0 до 23, минуты и секунды от 0 до 59');
  133. readln(h,m,s);
  134. until(h in [0..23])and(m in [0..59])and(s in [0..59]);
  135. Window.Clear;
  136. Xc:=Window.Width div 2;//центр экрана
  137. Yc:=Window.Height div 2;
  138. KarkasElectro; //рисуем каркас
  139. DrawElectro;//рисуем изображение
  140. lockdrawing;
  141. repeat
  142. sleep(1000);//в цикле через секунду
  143. s:=s+1;
  144. Window.Clear;
  145. KarkasElectro; //рисуем каркас
  146. DrawElectro;//меняем изображение
  147. redraw;
  148. until false;//пока не нажат крестик в левом верхнем углу
  149. end.

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

  1. Объявляются переменные h, m, s, Xc, Yc, c1, c2, c3, c4, c5, c6 типа integer. Переменные h, m, s предположительно используются для хранения текущего времени (часы, минуты, секунды).
  2. Описываются процедуры для прорисовки цифр (Zero, One, Two, ..., Nine) и процедура для выбора нужной цифры (Number).
  3. Описывается процедура для рисования каркаса (KarkasElectro), которая рисует прямоугольник и зеленые пиксели.
  4. Описывается процедура для рисования нужных цифр (DrawElectro), которая инициализирует текущее время, вычисляет цифры для часов, минут и секунд, а затем рисует их на экране.
  5. Основной код программы начинается с запроса ввода начального времени пользователем (часы, минуты, секунды) и очистки окна.
  6. На экране рисуется каркас с помощью процедуры KarkasElectro.
  7. Рисуется изображение часов с помощью процедуры DrawElectro.
  8. В основном цикле происходит изменение времени каждую секунду, с последующим обновлением изображения на экране.
  9. Цикл повторяется до тех пор, пока пользователь не закроет окно (нажмет крестик в левом верхнем углу).

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


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

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

9   голосов , оценка 3.778 из 5

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

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

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