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