Напишите программу, которая определяет, когда должен быть подан звуковой сигнал - Turbo Pascal
Формулировка задачи:
Таймер — это часы, которые умеют подавать звуковой сигнал по прошествии некоторого периода времени. Напишите программу, которая определяет, когда должен быть подан звуковой сигнал.
Формат входных данных
В первой строке входного файла записано текущее время в формате ЧЧ:ММ:СС (с ведущими нулями). При этом оно удовлетворяет ограничениям: ЧЧ — от 00 до 23, ММ и СС — от 00 до 60.
Во второй строке записан интервал времени, который должен быть измерен. Интервал записывается в формате Ч:М:С (где Ч, М и С — от 0 до 109, без ведущих нулей). Дополнительно если Ч = 0 (или Ч = 0 и М = 0), то они могут быть опущены. Например, 100:60 на самом деле означает 100 минут 60 секунд, что то же самое, что 101:0 или 1:41:0. А 42 обозначает 42 секунды. 100:100:100 — 100 часов, 100 минут, 100 секунд, что то же самое, что 101:41:40.
Формат выходных данных
В выходной файл выведите в формате ЧЧ:ММ:СС время, во сколько прозвучит звуковой сигнал. При этом если сигнал прозвучит не в текущие сутки, то дальше должна следовать запись +<кол-во> days. Например, если сигнал прозвучит на следующий день — то +1 days.
Вход
01:01:01 48:0:0 01:01:01 58:119 23:59:59 1Выход
01:01:01+2 days 02:01:00 00:00:00+1 daysРешение задачи: «Напишите программу, которая определяет, когда должен быть подан звуковой сигнал»
textual
Листинг программы
var a,b,c, a1,b1,c1,col,sum:int64; str:string; i,t:integer; begin assign(input, 'input.txt'); reset(input); assign(output, 'output.txt'); rewrite(output); readln(str); i:=length(str); t:=1; while (i>0) and (str[i]<>':') do begin c:=c+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; t:=1; dec(i); while (i>0) and (str[i]<>':') do begin b:=b+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; t:=1; dec(i); while (i>0) and (str[i]<>':') do begin a:=a+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; read(str); i:=length(str); t:=1; while (i>0) and (str[i]<>':') do begin c1:=c1+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; t:=1; dec(i); while (i>0) and (str[i]<>':') do begin b1:=b1+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; t:=1; dec(i); while (i>0) and (str[i]<>':') do begin a1:=a1+(ord(str[i])-ord('0'))*t; t:=t*10; dec(i); end; sum:=c+c1+b*60+b1*60+a*3600+a1*3600; col:=sum div 86400; sum:=sum mod 86400; a:=sum div 3600; sum:=sum mod 3600; b:=sum div 60; c:=sum mod 60; if a<10 then write('0'); write(a,':'); if b<10 then write('0'); write(b,':'); if c<10 then write('0'); write(c); if col>0 then write('+',col,' days'); writeln(); end.
Объяснение кода листинга программы
- Создание переменных для хранения текущего времени и общего времени, а также переменных для хранения суммы часов, минут и секунд.
- Открытие файлов input.txt и output.txt.
- Чтение строки из файла input.txt.
- Инициализация переменной i и t.
- Пока строка не закончится и символы в строке не будут : (т.е. пока есть еще цифры), выполнять следующие действия:
- Вычислить сумму цифр текущего символа и добавить ее к общему времени.
- Увеличить значение переменной t в 10 раз.
- Уменьшить значение переменной i на 1.
- Закрыть файл input.txt.
- Повторить шаги 5 для оставшихся символов в строке.
- Повторить шаги 5 для оставшихся символов во втором слове.
- Повторить шаги 5 для оставшихся символов в третьем слове.
- Вычислить общее время, разделив сумму часов, минут и секунд на 86400 (количество секунд в дне).
- Вывести результат на экран.
- Если сумма часов меньше 10, вывести ноль перед часами.
- Если сумма минут меньше 10, вывести ноль перед минутами.
- Если сумма секунд меньше 10, вывести ноль перед секундами.
- Если общее время больше 0, вывести плюс и количество дней.
- Закрыть файл output.txt.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д