"Электронные часы" - Pascal

Узнай цену своей работы

Формулировка задачи:

Сама задача : "Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями. С начала суток прошло n секунд. Выведите, что покажут часы." Ссылка на нее : http://informatics.mccme.ru/mod/stat...apterid=2948#1.
Program Time2;
var a,n: Integer;
Begin
Readln(n);
If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
else 
If (n<3600) and ((n div 60)<10) and ((n mod 60)<10) then 
Writeln ('00:0' ,n div 60,':0',n mod 60)
else
If (n<3600) and ((n div 60)>=10) and ((n mod 60)>=10) then 
Writeln ('00:' ,n div 60,':',n mod 60)
else
If (n<86400) and (n>3600) and ((n div 3600)<10) and (((n mod 3600) div 60)<10) and (((n mod 3600)mod 60)<10) then
Writeln ('0',n div 3600, ':0' , (n mod 3600) div 60, ':0' , (n mod 3600)mod 60)
else
If (n<86400) and (n>3600) and ((n div 3600)>=10) and (((n mod 3600) div 60)>=10) and (((n mod 3600)mod 60)>10)then
Writeln (n div 3600, ':' , (n mod 3600) div 60, ':' , (n mod 3600)mod 60)
else
If (n mod 86400 = 0) then Writeln ('00', ':' , '00' , ':' ,'00')
else 
a:=n mod 86400;
If (n>86400) and ((a div 3600)>=10) and (((a mod 3600) div 60)>=10) and (((a mod 3600)mod 60)>=10)  then 
Begin
{a:=n mod 86400;}
Writeln (a div 3600, ':' , (a mod 3600) div 60, ':' , (a mod 3600)mod 60)
end
else
If (n>86400) and ((a div 3600)<10) and (((a mod 3600) div 60)<10) and (((a mod 3600)mod 60)<10) then
Writeln ('0',a div 3600, ':0' , (a mod 3600) div 60, ':0' , (a mod 3600)mod 60)
end.
Проблема в том,что пока я не начал пытаться сделать так,чтобы выводилось в "правильном" формате, все было хорошо. Выдавало под любые заданные числа, протестировал вариантов 30. Начал мучаться с этими нулями, которые должны появляться перед минутами или секундами, если их меньше 10 и все покатилось к черту. Теперь программа правильно срабатывает только на определенные числа, причем алгоритм "срабатывания" я пока что не смог уловить. На большинстве же чисел программа просто ничего не выдает. Ладно бы хоть ошибки какие-то выдавала,так нет же,просто пустой экран. Этот способ "правильной" записи через "If" имеет вообще право на жизнь? Вот первоначальный вариант,где все выдавалось в неправильном формате,но правильно по сути
Program Time2;
var a,n: Integer;
Begin
Readln(n);
If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
else 
If n<86400 then
Writeln (n div 3600, ':' , (n mod 3600) div 60, ':' , (n mod 3600)mod 60)
else
If n mod 86400 = 0 then Writeln ('00', ':' , '00' , ':' ,'00')
else 
If n>86400 then 
Begin
a:=n mod 86400;
Writeln (a div 3600, ':' , (a mod 3600) div 60, ':' , (a mod 3600)mod 60);
end
end.
И в каком случае программа вообще "просто молчит"?

Решение задачи: «"Электронные часы"»

textual
Листинг программы
Program Time2;
var a,n,h,m,s: Integer;
Begin
Readln(n);
n:=n mod 86400;
If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
else
 begin
  h:=n div 3600;
  m:=n mod 3600 div 60;
  s:=(n mod 3600)mod 60;
  If h<10 then write('0',h,':')else write(h,':');
  if m<10 then write('0',m,':')else write(m,':');
  if s<10 then write('0',s)else write(s);
 end;
end.

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

  1. Объявление переменных:
    • a, n, h, m, s типа Integer.
  2. Ввод значения переменной n с клавиатуры.
  3. Вычисление остатка от деления переменной n на 86400 и сохранение в n.
  4. Проверка условия:
    • Если n равно 0, то выводится строка 00:00:00.
  5. В противном случае:
    • Вычисляется значение переменной h как частное от деления n на 3600.
    • Вычисляется значение переменной m как остаток от деления n на 3600, делённый на 60.
    • Вычисляется значение переменной s как остаток от деления n на 3600, и от остатка от деления на 60.
  6. Вывод времени в формате чч:мм:сс:
    • Если значение переменной h меньше 10, то выводится 0 и значение h, иначе выводится только значение h.
    • Если значение переменной m меньше 10, то выводится 0 и значение m, иначе выводится только значение m.
    • Если значение переменной s меньше 10, то выводится 0 и значение s, иначе выводится только значение s.

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


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

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

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