Pers.narod.ru. Алгоритмы. Часовая и минутная стрелки на одной линии |
Задано время в часах и минутах, указывающее момент времени "M часов, N минут". Определить наименьшее время (число минут), которое должно пройти до момента, когда часовая и минутная стрелки на циферблате совпадут или окажутся одна напротив другой, то есть, расположатся на одной линии.
Расчёт выполнен в целых числах, всю работу выполняет функция clock_arrows_coincidence
, в программу
добавлено 10 тестов,
ошибок не нашёл, хотя на 100% в правильности кода не уверен.
Допустимы значения M от 0 до 12 включительно и N от 0 до 60 включительно, впрочем, функция сама их приведёт к допустимым.
function clock_arrows_coincidence (m,n:integer):integer; {m часов, n минут. Вернет время в минутах x, через которое часовые стрелки будут на одной линии} var nk,m1,m2,x:integer; begin m:=m mod 12; n:=n mod 60; nk:=n div 12; m1:=m*5+nk; m2:=m1+30; if m1<31 then if n>m1 then if n<m2 then x:=m2-n else x:=60-n+m1 else x:=m1-n else if n<m1 then if n>m2-60 then x:=m1-n else x:=m2-60-n else x:=m2-n; clock_arrows_coincidence:=x+x div 12; end; const test : array [1..10,1..2] of integer = ( (0,0), (9,30), (11,15), (1,1), (9,8), (8,11), (8,9), (12,59), (5,30), (7,22) ); var i,r:integer; begin for i:=1 to 10 do begin r:=clock_arrows_coincidence(test[i,1],test[i,2]); writeln (test[i,1]:2,':',test[i,2]:2,' - через ',r,' мин.'); end; writeln ('Enter для выхода...'); reset (input); readln; end.
гостевая; E-mail |