Изобразить на экране работающие электронные часы с цифровым индикатором - 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.
- В основном цикле происходит изменение времени каждую секунду, с последующим обновлением изображения на экране.
- Цикл повторяется до тех пор, пока пользователь не закроет окно (нажмет крестик в левом верхнем углу).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д