Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 22.12.2010, 16:55   #1 (permalink)
Alexander Mece
Новичок
 
Регистрация: 17.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post Очередная задачка, на этот раз несколько связана со временем.

Даны целые числа m, n (0 < m ≤ 12,0 ≤ n < 60), указывающие момент времени: «m часов, n минут». Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки на циферблате:
а) совпадут,
б) расположатся перпендикулярно друг другу.
Alexander Mece вне форума   Ответить с цитированием

Старый 22.12.2010, 16:55
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ваш топик на эту тему не единственный, вот похожие

Очередная проблема с материнкой
Задачка.
Очередная проблема
Задачка
IBM ThinkPad 390XPIII(2626). Проблема с датой и временем

Старый 22.12.2010, 17:28   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Предполагаю, что тут надо отталкиваться от соотношения "час к минуте" как 1/60 к 1/3600 и, соответственно, для а) - уравнять соотношения (m+х)/60=(n+х)/3600 и вычислить х; для б) соответственно, нужно использовать сдвиг на 15 единиц, чтобы получить перпендикуляр.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 22.12.2010, 22:55   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вот. Не очень, правда, изящно, но уж что есть:
Код:
VAR
 h,m,Angle_h,Angle_m,A_h,A_m,min:Integer;
BEGIN
 Write('Hours = ');
 ReadLn(h);
 Write('Minutes = ');
 ReadLn(m);
 Angle_h:=h*30+(m div 2);
 Angle_m:=m*6;
 A_h:=Angle_h;
 A_m:=Angle_m;
 min:=0;
 Repeat
  Inc(min);
  A_h:=h*30+((m+min) div 2);
  If A_h>360 then A_h:=A_h-360;
  Inc(A_m,6);
  If A_m>360 then A_m:=A_m-360;
 Until ABS(A_h-A_m)<6;
 WriteLn('Hands will coincide in ',min,' minutes');
 A_h:=Angle_h;
 A_m:=Angle_m;
 min:=0;
 Repeat
  Inc(min);
  A_h:=h*30+((m+min) div 2);
  If A_h>360 then A_h:=A_h-360;
  Inc(A_m,6);
  If A_m>360 then A_m:=A_m-360;
 Until ABS(ABS(A_h-A_m)-90)<6;
 WriteLn('Hands will form 90-degrees angle in ',min,' minutes');
 ReadLn;
END.
Здесь m и n заменены на h (hours) и m (minutes), соответственно. Так всё-таки удобнее.
И еще. Принято, что совпадение стрелок означает, что их угловое расхождение не превышает 6°, т.е. угла, соответствующего одной временнОй минуте. И для 90° - аналогично.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.12.2010, 08:29   #4 (permalink)
Alexander Mece
Новичок
 
Регистрация: 17.12.2010
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Vladimir_S Большое вам от меня - спасибо. Ваша помощь просто неоценима.
Alexander Mece вне форума   Ответить с цитированием
Старый 21.03.2011, 11:57   #5 (permalink)
milash
Новичок
 
Регистрация: 21.03.2011
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

да большое спасибо, очень пригодилось)
milash вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:23.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.