Изобразить на экране работающие электронные часы с цифровым индикатором - Pascal
Формулировка задачи:
Электронные часы. Изобразить на экране работающие электронные с цифровым индикатором (каждая цифра изображается на 7-сегментном шаблоне). При недопустимости встроенного таймера ЭВМ реализовать его с помощью настроенных циклов, задавая стартовое время при запуске программы. (В паскале).
Решение задачи: «Изобразить на экране работающие электронные часы с цифровым индикатором»
textual
Листинг программы
uses graphABC; var h,m,s,Xc,Yc,c1,c2,c3,c4,c5,c6:integer; //прорисовка цифр procedure Zero(xn,yn:integer); begin Rectangle(0+xn,0+yn,5+xn,10+yn); end; procedure One(xn,yn:integer); begin Line(5+xn,0+yn,5+xn,10+yn); end; procedure Two(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(0+xn,5+yn,0+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Three(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Fouhr(xn,yn:integer); begin Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); end; procedure Five(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); end; procedure Six(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(0+xn,0+yn,0+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); Line(0+xn,5+yn,0+xn,10+yn); end; procedure Seven(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,10+yn); end; procedure Eight(xn,yn:integer); begin Rectangle(0+xn,0+yn,5+xn,10+yn); Line(0+xn,5+yn,5+xn,5+yn); end; procedure Nine(xn,yn:integer); begin Line(0+xn,0+yn,5+xn,0+yn); Line(5+xn,0+yn,5+xn,5+yn); Line(5+xn,5+yn,0+xn,5+yn); Line(5+xn,5+yn,5+xn,10+yn); Line(0+xn,10+yn,5+xn,10+yn); Line(0+xn,0+yn,0+xn,5+yn); end; //выбор нужной цифры procedure Number(n,xn,yn:integer); begin case n of 0:Zero(xn,yn); 1:One(xn,yn); 2:Two(xn,yn); 3:Three(xn,yn); 4:Fouhr(xn,yn); 5:Five(xn,yn); 6:Six(xn,yn); 7:Seven(xn,yn); 8:Eight(xn,yn); 9:Nine(xn,yn); end; end; //рисование каркаса} procedure KarkasElectro; begin Rectangle(Xc-40,Yc-15,Xc+36,Yc+15); setpixel(Xc-40+25,Yc-3,clGreen); setpixel(Xc-40+25,Yc+3,clGreen); setpixel(Xc-40+50,Yc-3,clGreen); setpixel(Xc-40+50,Yc+3,clGreen); end; //рисование нужных цифр procedure DrawElectro; begin if s=60 then begin s:=0; m:=m+1; end; if m=60 then begin s:=0; m:=0; h:=h+1; end; if h=24 then begin s:=0; m:=0; h:=0; end; c1:=h div 10; c2:=h mod 10; c3:=m div 10; c4:=m mod 10; c5:=s div 10; c6:=s mod 10; SetPenColor(clGreen); Number(c1,Xc-40+5,Yc-15+10); Number(c2,Xc-40+15,Yc-15+10); Number(c3,Xc-40+30,Yc-15+10); Number(c4,Xc-40+40,Yc-15+10); Number(c5,Xc-40+55,Yc-15+10); Number(c6,Xc-40+65,Yc-15+10); end; begin repeat writeln('Введите начальное время, часы от 0 до 23, минуты и секунды от 0 до 59'); readln(h,m,s); until(h in [0..23])and(m in [0..59])and(s in [0..59]); Window.Clear; Xc:=Window.Width div 2;//центр экрана Yc:=Window.Height div 2; KarkasElectro; //рисуем каркас DrawElectro;//рисуем изображение lockdrawing; repeat sleep(1000);//в цикле через секунду s:=s+1; Window.Clear; KarkasElectro; //рисуем каркас DrawElectro;//меняем изображение redraw; until false;//пока не нажат крестик в левом верхнем углу end.
Объяснение кода листинга программы
- Объявляются переменные
h
,m
,s
,Xc
,Yc
,c1
,c2
,c3
,c4
,c5
,c6
типа integer. Переменныеh
,m
,s
предположительно используются для хранения текущего времени (часы, минуты, секунды). - Описываются процедуры для прорисовки цифр (Zero, One, Two, ..., Nine) и процедура для выбора нужной цифры (Number).
- Описывается процедура для рисования каркаса (KarkasElectro), которая рисует прямоугольник и зеленые пиксели.
- Описывается процедура для рисования нужных цифр (DrawElectro), которая инициализирует текущее время, вычисляет цифры для часов, минут и секунд, а затем рисует их на экране.
- Основной код программы начинается с запроса ввода начального времени пользователем (часы, минуты, секунды) и очистки окна.
- На экране рисуется каркас с помощью процедуры KarkasElectro.
- Рисуется изображение часов с помощью процедуры DrawElectro.
- В основном цикле происходит изменение времени каждую секунду, с последующим обновлением изображения на экране.
- Цикл повторяется до тех пор, пока пользователь не закроет окно (нажмет крестик в левом верхнем углу).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д