Аналоговые часы (для обычного Pascal ABC)

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

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

Здравствуйте. Создайте аналоговые часы показывающее текущее время. Помогите подкрутить код. Вот что имеется:
За стрелками остается след. Нужно убрать. Часовая стрелка не совсем верно работает, только переходит с одного часа на другой. И не столь важно, но почему в цифровых часах глюк встречается. После 60 секунд идет не 1,2,3.. а 09,19,29,..99.. после нормальных 15 сек начинается нормальная последовательность 16,17..60.

Решение задачи: «Аналоговые часы (для обычного Pascal ABC)»

textual
Листинг программы
uses
  Crt, GraphABC, Utils;
 
type
  DateTime = record
    Day, Month, Year, Hour, Minute, Second, Milliseconds: integer;
  end;
 
var
  time: DateTime;
  x, x0, y, y0: integer;
 
begin
  HideCursor;
  SetWindowSize(500, 500);
  x0 := 250; y0 := 250;
  LockDrawing;
  repeat
    ClearWindow;
    circle(250, 250, 170);
    SetFontColor(clblack);
    SetFontStyle(fsbold);
    TextOut(242, 90, '12');
    TextOut(245, 390, '6');
    TextOut(385, 240, '3');
    TextOut(105, 240, '9');
    
    time := CurrentDateTime;
    write('Âðåìÿ: ', time.hour, ':', time.minute, ':', time.second);
    GotoXY(1, 1);
 
    x := x0 + Round(60 * sin(Pi * time.hour / 6));
    y := y0 - Round(60 * cos(Pi * time.hour / 6));
    SetPenWidth(10); Line(x0, y0, x, y);
 
    x := x0 + Round(100 * sin(Pi * time.minute / 30));
    y := y0 - Round(100 * cos(Pi * time.minute / 30));
    SetPenWidth(7); Line(x0, y0, x, y);
 
    x := x0 + Round(120 * sin(Pi * time.second / 30));
    y := y0 - Round(120 * cos(Pi * time.second / 30));
    SetPenWidth(3); Line(x0, y0, x, y);
    Redraw
  until
  keyPressed;
end.

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

  1. В начале кода используются необходимые библиотеки Crt, GraphABC и Utils.
  2. Создается тип данных DateTime, который представляет аналоговые часы и содержит поля для дня, месяца, года, часа, минуты, секунды и миллисекунд.
  3. Переменная time устанавливается в текущее время.
  4. Устанавливаются размеры окна и скрывается курсор.
  5. Замораживается область рисования.
  6. Начинается цикл повторения, который выполняется до нажатия клавиши.
  7. Внутри цикла очищается окно, рисуется круг, устанавливается цвет шрифта и стиль шрифта.
  8. Выводится текстовое сообщение с текущим временем.
  9. Устанавливается новая позиция курсора.
  10. Вычисляются координаты точки на экране, соответствующей текущему времени.
  11. Рисуется линия между текущей точкой и предыдущей.
  12. Повторяются шаги 7-11 для минутной и секундной стрелок.
  13. Вызывается функция Redraw для обновления изображения.
  14. Цикл повторяется до нажатия клавиши.
  15. В конце кода вызывается функция keyPressed для обработки нажатия клавиши.

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


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

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

11   голосов , оценка 3.909 из 5
Похожие ответы