Изобразить на экране работающие электронные часы с цифровым индикатором - 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.

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

  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
Похожие ответы