"Электронные часы" - Pascal
Формулировка задачи:
Сама задача : "Электронные часы показывают время в формате h:mm:ss, то есть сначала записывается количество часов, потом обязательно двузначное количество минут, затем обязательно двузначное количество секунд. Количество минут и секунд при необходимости дополняются до двузначного числа нулями.
С начала суток прошло n секунд. Выведите, что покажут часы."
Ссылка на нее : http://informatics.mccme.ru/mod/stat...apterid=2948#1.
Проблема в том,что пока я не начал пытаться сделать так,чтобы выводилось в "правильном" формате, все было хорошо. Выдавало под любые заданные числа, протестировал вариантов 30. Начал мучаться с этими нулями, которые должны появляться перед минутами или секундами, если их меньше 10 и все покатилось к черту. Теперь программа правильно срабатывает только на определенные числа, причем алгоритм "срабатывания" я пока что не смог уловить. На большинстве же чисел программа просто ничего не выдает. Ладно бы хоть ошибки какие-то выдавала,так нет же,просто пустой экран.
Этот способ "правильной" записи через "If" имеет вообще право на жизнь?
Вот первоначальный вариант,где все выдавалось в неправильном формате,но правильно по сути
И в каком случае программа вообще "просто молчит"?
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.
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.
Объяснение кода листинга программы
- Объявление переменных:
a
,n
,h
,m
,s
типа Integer.
- Ввод значения переменной
n
с клавиатуры. - Вычисление остатка от деления переменной
n
на 86400 и сохранение вn
. - Проверка условия:
- Если
n
равно 0, то выводится строка00:00:00
.
- Если
- В противном случае:
- Вычисляется значение переменной
h
как частное от деленияn
на 3600. - Вычисляется значение переменной
m
как остаток от деленияn
на 3600, делённый на 60. - Вычисляется значение переменной
s
как остаток от деленияn
на 3600, и от остатка от деления на 60.
- Вычисляется значение переменной
- Вывод времени в формате
чч:мм:сс
:- Если значение переменной
h
меньше 10, то выводится0
и значениеh
, иначе выводится только значениеh
. - Если значение переменной
m
меньше 10, то выводится0
и значениеm
, иначе выводится только значениеm
. - Если значение переменной
s
меньше 10, то выводится0
и значениеs
, иначе выводится только значениеs
.
- Если значение переменной
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д