"Электронные часы" - 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
.
- Если значение переменной
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д