Определить время, когда пирог будет испечен - 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
Листинг программы
program Compare; function TimeToStr(h, m: integer): string; var s: string; begin str(h: 2, TimeToStr); if TimeToStr[1] = ' ' then TimeToStr[1] := '0'; str(m: 2, s); if s[1] = ' ' then s[1] := '0'; TimeToStr := TimeToStr + ':' + s; end; function ByCyborgDrone(const s: string): string; var hh, mm: byte; begin val(copy(s, 1, 2), hh); val(copy(s, 4, 2), mm); if hh <= mm mod 10 * 10 + mm div 10 then Inc(hh); if hh = 24 then hh := 0 else if hh mod 10 in [6..9] then hh := hh div 10 * 10 + 10; mm := hh mod 10; hh := hh div 10; ByCyborgDrone := TimeToStr(hh * 10 + mm, mm * 10 + hh); end; function ByFPA(const s: string): string; var hh, mm: string; hm: string; h: integer; r: integer; begin hh := copy(s, 1, 2); mm := copy(s, 4, 2); val(hh, h, r); hm := hh[2] + hh[1]; if (hm <= mm) or (h in [6..9, 16..19]) then begin case h of 5..9: h := 10; 15..19: h := 20; 23: h := 0; else Inc(h); end; str(h: 2, hh); if hh[1] = ' ' then hh[1] := '0'; hm := hh[2] + hh[1]; end; ByFPA := hh + ':' + hm; end; var s: string; hh, mm: integer; begin for hh := 0 to 23 do for mm := 00 to 59 do begin s := TimeToStr(hh, mm); if ByFPA(s) <> ByCyborgDrone(s) then writeln('Time: ', s, ' ByFPA: ', byFPA(s), ' by CyborgDrone: ', ByCyborgDrone(s)); end; end.
Объяснение кода листинга программы
- Создается процедура TimeToStr с параметрами h, m типа integer и возвращающая значение типа string.
- В процедуре TimeToStr создается переменная s типа string.
- Выполняется преобразование значений h и m в строку и запись результата в переменную TimeToStr.
- Проверяется, если первый символ переменной TimeToStr равен пробелу, то он заменяется на 0.
- Выполняется преобразование значения m в строку и запись результата в переменную s.
- Проверяется, если первый символ переменной s равен пробелу, то он заменяется на 0.
- Значению переменной TimeToStr добавляется символ
:
и значение переменной s. - Создается функция ByCyborgDrone с параметром s типа string и возвращающая значение типа string.
- В функции ByCyborgDrone создаются переменные hh и mm типа byte.
- Выполняется преобразование подстроки s от 1 до 2 в число и запись результата в переменную hh.
- Выполняется преобразование подстроки s от 4 до 2 в число и запись результата в переменную mm.
- Проверяется условие, если hh <= mm mod 10 * 10 + mm div 10, то hh увеличивается на 1.
- Проверяется условие, если hh равно 24, то hh становится равным 0.
- Проверяется условие, если остаток от деления hh на 10 входит в диапазон [6..9], то hh заменяется на деление его на 10, умноженное на 10, увеличенное на 10.
- Значение mm присваивается остатку от деления hh на 10.
- Значение hh присваивается результату целочисленного деления hh на 10.
- Функции ByCyborgDrone присваивается значение, возвращаемое функцией TimeToStr, с аргументами hh 10 + mm и mm 10 + hh.
- Создается функция ByFPA с параметром s типа string и возвращающая значение типа string.
- В функции ByFPA создаются переменные hh, mm, hm типа string, h и r типа integer.
- Подстрока от 1 до 2 записывается в переменную hh.
- Подстрока от 4 до 2 записывается в переменную mm.
- Выполняется преобразование значения переменной hh в число и запись результата в переменную h, а остаток от деления в переменную r.
- Значению переменной hm присваивается значение первого символа и второго символа переменной hh.
- Проверяется условие, если hm меньше или равно значению переменной mm, или значение переменной h входит в диапазон [6..9] или значение переменной h входит в диапазон [16..19], то выполняются действия в блоке begin...end.
- В зависимости от значения переменной h выполняется присвоение нового значения переменной h.
- Выполняется преобразование значения переменной h в строку и запись результата в переменную hh.
- Если первый символ переменной hh равен пробелу, он заменяется на 0.
- Значению переменной hm присваивается значение второго и первого символов переменной hh.
- Функции ByFPA присваивается значение, равное hh +
:
+ hm. - Объявляются переменные s типа string, hh и mm типа integer.
- В цикле для значений от 0 до 23 переменной hh и от 0 до 59 переменной mm выполняются действия в блоке begin...end.
- Переменной s присваивается результат функции TimeToStr с аргументами hh и mm.
- Если значение функции ByFPA с аргументом s не равно значению функции ByCyborgDrone с аргументом s, выводится сообщение сравнения времени.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д