Напишите программу, которая определяет, когда должен быть подан звуковой сигнал - 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.

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

  1. Создание переменных для хранения текущего времени и общего времени, а также переменных для хранения суммы часов, минут и секунд.
  2. Открытие файлов input.txt и output.txt.
  3. Чтение строки из файла input.txt.
  4. Инициализация переменной i и t.
  5. Пока строка не закончится и символы в строке не будут : (т.е. пока есть еще цифры), выполнять следующие действия:
    • Вычислить сумму цифр текущего символа и добавить ее к общему времени.
    • Увеличить значение переменной t в 10 раз.
    • Уменьшить значение переменной i на 1.
  6. Закрыть файл input.txt.
  7. Повторить шаги 5 для оставшихся символов в строке.
  8. Повторить шаги 5 для оставшихся символов во втором слове.
  9. Повторить шаги 5 для оставшихся символов в третьем слове.
  10. Вычислить общее время, разделив сумму часов, минут и секунд на 86400 (количество секунд в дне).
  11. Вывести результат на экран.
  12. Если сумма часов меньше 10, вывести ноль перед часами.
  13. Если сумма минут меньше 10, вывести ноль перед минутами.
  14. Если сумма секунд меньше 10, вывести ноль перед секундами.
  15. Если общее время больше 0, вывести плюс и количество дней.
  16. Закрыть файл output.txt.

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


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

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

8   голосов , оценка 4.5 из 5
Похожие ответы