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