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

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

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

Сама задача : "Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями. С начала суток прошло n секунд. Выведите, что покажут часы." Ссылка на нее : http://informatics.mccme.ru/mod/stat...apterid=2948#1.
Листинг программы
  1. Program Time2;
  2. var a,n: Integer;
  3. Begin
  4. Readln(n);
  5. If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
  6. else
  7. If (n<3600) and ((n div 60)<10) and ((n mod 60)<10) then
  8. Writeln ('00:0' ,n div 60,':0',n mod 60)
  9. else
  10. If (n<3600) and ((n div 60)>=10) and ((n mod 60)>=10) then
  11. Writeln ('00:' ,n div 60,':',n mod 60)
  12. else
  13. 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
  14. Writeln ('0',n div 3600, ':0' , (n mod 3600) div 60, ':0' , (n mod 3600)mod 60)
  15. else
  16. 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
  17. Writeln (n div 3600, ':' , (n mod 3600) div 60, ':' , (n mod 3600)mod 60)
  18. else
  19. If (n mod 86400 = 0) then Writeln ('00', ':' , '00' , ':' ,'00')
  20. else
  21. a:=n mod 86400;
  22. If (n>86400) and ((a div 3600)>=10) and (((a mod 3600) div 60)>=10) and (((a mod 3600)mod 60)>=10) then
  23. Begin
  24. {a:=n mod 86400;}
  25. Writeln (a div 3600, ':' , (a mod 3600) div 60, ':' , (a mod 3600)mod 60)
  26. end
  27. else
  28. If (n>86400) and ((a div 3600)<10) and (((a mod 3600) div 60)<10) and (((a mod 3600)mod 60)<10) then
  29. Writeln ('0',a div 3600, ':0' , (a mod 3600) div 60, ':0' , (a mod 3600)mod 60)
  30. end.
Проблема в том,что пока я не начал пытаться сделать так,чтобы выводилось в "правильном" формате, все было хорошо. Выдавало под любые заданные числа, протестировал вариантов 30. Начал мучаться с этими нулями, которые должны появляться перед минутами или секундами, если их меньше 10 и все покатилось к черту. Теперь программа правильно срабатывает только на определенные числа, причем алгоритм "срабатывания" я пока что не смог уловить. На большинстве же чисел программа просто ничего не выдает. Ладно бы хоть ошибки какие-то выдавала,так нет же,просто пустой экран. Этот способ "правильной" записи через "If" имеет вообще право на жизнь? Вот первоначальный вариант,где все выдавалось в неправильном формате,но правильно по сути
Листинг программы
  1. Program Time2;
  2. var a,n: Integer;
  3. Begin
  4. Readln(n);
  5. If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
  6. else
  7. If n<86400 then
  8. Writeln (n div 3600, ':' , (n mod 3600) div 60, ':' , (n mod 3600)mod 60)
  9. else
  10. If n mod 86400 = 0 then Writeln ('00', ':' , '00' , ':' ,'00')
  11. else
  12. If n>86400 then
  13. Begin
  14. a:=n mod 86400;
  15. Writeln (a div 3600, ':' , (a mod 3600) div 60, ':' , (a mod 3600)mod 60);
  16. end
  17. end.
И в каком случае программа вообще "просто молчит"?

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

textual
Листинг программы
  1. Program Time2;
  2. var a,n,h,m,s: Integer;
  3. Begin
  4. Readln(n);
  5. n:=n mod 86400;
  6. If n=0 then Writeln ('00', ':' , '00' , ':' ,'00')
  7. else
  8.  begin
  9.   h:=n div 3600;
  10.   m:=n mod 3600 div 60;
  11.   s:=(n mod 3600)mod 60;
  12.   If h<10 then write('0',h,':')else write(h,':');
  13.   if m<10 then write('0',m,':')else write(m,':');
  14.   if s<10 then write('0',s)else write(s);
  15.  end;
  16. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы