Определить время, когда пирог будет испечен - Pascal

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

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

Помогите пожалуйста решить задачу. Заранее спасибо! Пекарь считает, что для получения рождественского пирога идеальной симетричной формы его нужно вынимать из духовки в тот момент, когда часы показывают «палиндромное» время, которое читается одинаково слева-направо и справа-налево. Напишите программу, которая определяет по времени установки пирога в духовку время, когда будет подходящее время для его извлечения.

Входные данные

В единственной строке входного файла INPUT.TXT записано время установки пирога в духовку в формате HH:MM (00 ≤ HH ≤ 23, 00 ≤ MM ≤ 59).

Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести ближайшее «палиндромное» время в формате HH:MM.

Примеры

Ввод Вывод
1 00:00 01:10
2 12:34 13:31
3 23:59 00:00

Решение задачи: «Определить время, когда пирог будет испечен»

textual
Листинг программы
  1. program Compare;
  2.  
  3.   function TimeToStr(h, m: integer): string;
  4.   var
  5.     s: string;
  6.   begin
  7.     str(h: 2, TimeToStr);
  8.     if TimeToStr[1] = ' ' then
  9.       TimeToStr[1] := '0';
  10.     str(m: 2, s);
  11.     if s[1] = ' ' then
  12.       s[1] := '0';
  13.     TimeToStr := TimeToStr + ':' + s;
  14.   end;
  15.  
  16.   function ByCyborgDrone(const s: string): string;
  17.   var
  18.     hh, mm: byte;
  19.   begin
  20.     val(copy(s, 1, 2), hh);
  21.     val(copy(s, 4, 2), mm);
  22.     if hh <= mm mod 10 * 10 + mm div 10 then
  23.       Inc(hh);
  24.     if hh = 24 then
  25.       hh := 0
  26.     else if hh mod 10 in [6..9] then
  27.       hh := hh div 10 * 10 + 10;
  28.     mm := hh mod 10;
  29.     hh := hh div 10;
  30.     ByCyborgDrone := TimeToStr(hh * 10 + mm, mm * 10 + hh);
  31.   end;
  32.  
  33.   function ByFPA(const s: string): string;
  34.   var
  35.     hh, mm: string;
  36.     hm: string;
  37.     h:  integer;
  38.     r:  integer;
  39.   begin
  40.     hh := copy(s, 1, 2);
  41.     mm := copy(s, 4, 2);
  42.     val(hh, h, r);
  43.     hm := hh[2] + hh[1];
  44.     if (hm <= mm) or (h in [6..9, 16..19]) then
  45.     begin
  46.       case h of
  47.         5..9: h := 10;
  48.         15..19: h := 20;
  49.         23: h := 0;
  50.         else
  51.           Inc(h);
  52.       end;
  53.       str(h: 2, hh);
  54.       if hh[1] = ' ' then
  55.         hh[1] := '0';
  56.       hm := hh[2] + hh[1];
  57.     end;
  58.     ByFPA := hh + ':' + hm;
  59.   end;
  60.  
  61. var
  62.   s: string;
  63.   hh, mm: integer;
  64. begin
  65.   for hh := 0 to 23 do
  66.     for mm := 00 to 59 do
  67.     begin
  68.       s := TimeToStr(hh, mm);
  69.       if ByFPA(s) <> ByCyborgDrone(s) then
  70.         writeln('Time: ', s, '    ByFPA: ', byFPA(s), '    by CyborgDrone: ',
  71.           ByCyborgDrone(s));
  72.     end;
  73. end.

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

  1. Создается процедура TimeToStr с параметрами h, m типа integer и возвращающая значение типа string.
  2. В процедуре TimeToStr создается переменная s типа string.
  3. Выполняется преобразование значений h и m в строку и запись результата в переменную TimeToStr.
  4. Проверяется, если первый символ переменной TimeToStr равен пробелу, то он заменяется на 0.
  5. Выполняется преобразование значения m в строку и запись результата в переменную s.
  6. Проверяется, если первый символ переменной s равен пробелу, то он заменяется на 0.
  7. Значению переменной TimeToStr добавляется символ : и значение переменной s.
  8. Создается функция ByCyborgDrone с параметром s типа string и возвращающая значение типа string.
  9. В функции ByCyborgDrone создаются переменные hh и mm типа byte.
  10. Выполняется преобразование подстроки s от 1 до 2 в число и запись результата в переменную hh.
  11. Выполняется преобразование подстроки s от 4 до 2 в число и запись результата в переменную mm.
  12. Проверяется условие, если hh <= mm mod 10 * 10 + mm div 10, то hh увеличивается на 1.
  13. Проверяется условие, если hh равно 24, то hh становится равным 0.
  14. Проверяется условие, если остаток от деления hh на 10 входит в диапазон [6..9], то hh заменяется на деление его на 10, умноженное на 10, увеличенное на 10.
  15. Значение mm присваивается остатку от деления hh на 10.
  16. Значение hh присваивается результату целочисленного деления hh на 10.
  17. Функции ByCyborgDrone присваивается значение, возвращаемое функцией TimeToStr, с аргументами hh 10 + mm и mm 10 + hh.
  18. Создается функция ByFPA с параметром s типа string и возвращающая значение типа string.
  19. В функции ByFPA создаются переменные hh, mm, hm типа string, h и r типа integer.
  20. Подстрока от 1 до 2 записывается в переменную hh.
  21. Подстрока от 4 до 2 записывается в переменную mm.
  22. Выполняется преобразование значения переменной hh в число и запись результата в переменную h, а остаток от деления в переменную r.
  23. Значению переменной hm присваивается значение первого символа и второго символа переменной hh.
  24. Проверяется условие, если hm меньше или равно значению переменной mm, или значение переменной h входит в диапазон [6..9] или значение переменной h входит в диапазон [16..19], то выполняются действия в блоке begin...end.
  25. В зависимости от значения переменной h выполняется присвоение нового значения переменной h.
  26. Выполняется преобразование значения переменной h в строку и запись результата в переменную hh.
  27. Если первый символ переменной hh равен пробелу, он заменяется на 0.
  28. Значению переменной hm присваивается значение второго и первого символов переменной hh.
  29. Функции ByFPA присваивается значение, равное hh + : + hm.
  30. Объявляются переменные s типа string, hh и mm типа integer.
  31. В цикле для значений от 0 до 23 переменной hh и от 0 до 59 переменной mm выполняются действия в блоке begin...end.
  32. Переменной s присваивается результат функции TimeToStr с аргументами hh и mm.
  33. Если значение функции ByFPA с аргументом s не равно значению функции ByCyborgDrone с аргументом s, выводится сообщение сравнения времени.

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


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

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

11   голосов , оценка 4.182 из 5

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

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

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