|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.09.2011, 23:35 | #1 |
Пользователь
Регистрация: 11.08.2011
Сообщений: 23
|
Совпадение стрелок циферблата
Помогите, пожалуйста, решить задачу (на языке Си):
Надані цілі числа m, n(голини та хвилини), 0≤m≤11, 0≤n≤59, що визначають час доби. Визначити найменший час(число повних хвилин), які повинні пройти до того моменту, коли годинна ат хвилинна стрілки на циферблаті співпадуть. |
30.09.2011, 02:26 | #2 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Украинский, да еще и с опечатками - это интересный экспириенс.. ))
Наконец-то эта задача получила полное условие (вот тут она оборвалась на полуслове)). Паркер, давай выкладывай свои наработки или хотя бы соображения - поможем обязательно!
Предпочитаю на "ты".
|
30.09.2011, 02:53 | #3 |
Пользователь
Регистрация: 11.08.2011
Сообщений: 23
|
Совпадение стрелок циферблата
Перевод на русский этой задачки(я не знала, что тут не все понимают украинский):
Даны целые числа m, n (часы и минуты), 0 ≤ m ≤ 11, 0 ≤ n ≤ 59, определяющие время суток. Определить наименьшее время (число полных минут), которые должны пройти до того момента, когда часовая и минутная стрелки на циферблате совпадут. За ошибки в тексте прошу прощения! А вот на счет 0 <m ≤ 12, 0 ≤ n <60 не знаю, было написано точно 0 ≤ m ≤ 11, 0 ≤ n ≤ 59. Смысл задачи понимаю, но алгоритма догнать не могу))) |
30.09.2011, 05:46 | #4 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Спасибо за перевод - я-то и так понял, но другим это может быть важно.
А хочешь? в смысле - хочешь "догнать"? )) Слушай, Паркер, большинство народу тут хочет готовый код, чтобы сдать его все забыть. Если ты не такая - мы могли бы помочь тебе сделать все самой. Ты ответь, а пока я тогда начну.. Задача про совпадение стрелок стара, как мир. Нарисуй себе циферблат (12-часовой, говорим только о нем) на листочке и отметь все положения стрелок, когда они совпадают. Их будет 11. Первое в 12:00. Как узнать следующее? Для этого нужно решить уравнение. Пусть t - это время (от 12:00), в которое стрелки снова встретились. Минутная стрелка проходит полный круг за 1 час. Значит, за время t она пройдет угол (считая в полных оборотах), равный t/60 (время считаем в минутах). Часовая стрелка проходит полный круг за 12 часов, то есть 12*60=720 минут. Значит, за время t она пройдет угол t/720. Приравниваем эти два числа и получаем уравнение для t t/60 = t/720 12*t= t 11*t = 0 t = 0 Мы получили ответ t=0. Это означает, что в самый начальный момент времени (в 12:00) стрелки совпадают. Это правильно, но только это мы и так знали. Это совпадение будем называть нулевым, t(0)=0 (в скобках я пишу индекс). Как рассчитать другие совпадения? Если ты последишь за часами с 12:00 до 1:00 (то есть в течение первого часа), ты увидишь, что стрелки ни разу не встретились. А встретятся они в начале второго часа, когда минутная, пройдя полный круг, догонит часовую. Это значит, что она пройдет на самом деле угол, больше полного круга. Но нас интересеут только часть этого пути ЗА полным кругом. Поэтому мы вычтем из полного угла один оборот: t(1)/60 - 1 (напоминаю: в скобках я пишу индекс) И теперь, как и прежде, снова приравняем углы: t(1)/60 - 1 = t(1)/720 И решим это уравнение: 12*t(1) - 720 = t(1) 11*t(1) = 720 t(1) = 720/11 = 65.454545454545454545454545454545.. . = 65.(45) = 60 + 5.(45) То есть, стрелки встретятся через 1 час и 5 мин с секундами. Чтобы найти второй момент встречи, можно либо решить уравнение: t(2)/60 - 2 = t(2)/720 (потому что встреча происходит после двух полных оборотов минутной стрелки), либо просто заметить, что время между моментами встречи должно проходить одинаковое - в силу симметрии, ведь мы могли бы повернуть циферблат (без стрелок), чтобы первый момент встречи снова был на 12:00. Таким образом, мы получаем следующую формулу: t(i) = t(1) * i = 720/11 * i Это - точные моменты встречи. Если мы подставим i=11 в эту формулу, то получим, что 11-ый момент встречи произойдет через 720 минут, что есть ровно 12 часов. То есть стрелки в 11-ый раз встретятся ровно через полсуток, снова на 12:00. Это вполне соответствует нашему опыту и служит проверкой на правильность. Кул? )) Теперь возвращаемся к условию задачи: нам дано текущее время T, нужно предсказать cколько пройдет до следующей встречи с точностью до минут. Для того, чтоб это сделать, надо сначала определить, сколько встреч уже произошло. Это можно сделать по формуле: n = [T/t(1)] - квадратные скабки означают целую часть. Тут остается вопрос.. Как быть, если время T точно совпало с моментом какой-то встречи стрелок? Считать эту встречу "следующей" (то есть до нее 0 минут) - или считать, что она уже произошла, и следующая наступит через t(1)? Поскольку в условии это не уточнено, то предлагаю поступать вторым образом. Тогда вышеприведенную формулу не придется корректировать )). Итак, мы знаем, что уже было n встреч. Значит, следующая встреча будет иметь номер n+1, и ее время можно рассчитать по той формуле как: t(n+1) = 720/11*(n+1) - тут первые скобки это индекс, а вторые - нет. Ну вот, осталось только вычесть T из t(n+1) - и мы узнаем, сколько времени с момента T до следующей встречи. Это время будет в минутах, но только оно включает и дробную часть. Нас же спрашивают, сколько ПОЛНЫХ минут, так что нужно снова воспользоваться услугами целой части. x = [720/11*(n+1) - T] где n = [T / (720/11)] Или, полностью: x = [720*([T/(720/11)]+1)/11 - T] Понятно пока? Жду ответа.
Предпочитаю на "ты".
|
30.09.2011, 18:53 | #5 |
Пользователь
Регистрация: 11.08.2011
Сообщений: 23
|
Конечно, хочу! в смысле - "догнать" ))
И, благодаря тебе(правильно поняла - "Предпочитаю на "ты"."?) уже догнала и все поняла! Это именно то, что было нужно , понять суть задачи! Только там, еще надо было добавить несколько скобочек в формулах. Так что, огромное тебе спасибо за разъяснение!!! |
01.10.2011, 04:09 | #6 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Ты все правильно поняла )).
Anytime, anywhere . Хм.. Где? Укажи поточнее, плз. Так что - с программированием ты сама справишься, или тоже показать, как?
Предпочитаю на "ты".
|
01.10.2011, 09:46 | #7 |
Пользователь
Регистрация: 11.08.2011
Сообщений: 23
|
Нууууу, для правильности записи t(i) = t(1) * i = 720/11 * i нужно t(i) = t(1) * i = (720/11) * i и тд., там, конечно, понятно, что на что перемножается, но если написать так в какой-нибудь проге, то оно будет считать не так, как надо. Может не во всех, но в некоторых точно(прогах).
|
01.10.2011, 10:17 | #8 | |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Цитата:
Но прежде всего - выше я писал не для программы, и даже не задумывался над такими вопросами. Интересно как совпало - я как раз пару часов назад ответил человеку именно про это (про скобочки и т.п.) Почитай тот мой пост, ладно? чтоб мне не повторяться.. Вот та тема: http://programmersforum.ru/showthread.php?t=167142 Тут добавлю только, что в любом вопросе надо достигать полной ясности. То есть ставить (ну, например) скобочки "почему-то" - не надо. Если что-то делаешь, надо понять, почему. Вот, я сейчас, например, поставлю тут примерно с дюжину скобочек, и мне совершенно ясно, почему: потому что настроение хорошее )))))))))))) Так как насчет программы? Сдюжишь сама или помочь? Мне кажется, что сдюжишь )). Но если будут вопросы - давай сюда!
Предпочитаю на "ты".
Последний раз редактировалось TinMan; 01.10.2011 в 10:19. |
|
02.10.2011, 01:59 | #9 | |
Пользователь
Регистрация: 11.08.2011
Сообщений: 23
|
Цитата:
(Я только начала изучать этот язык, поэтому очень часто возникают проблемы и вопросы, но у меня есть желание в них разобраться) |
|
02.10.2011, 02:44 | #10 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
Очень хорошо.
Ты покажи тогда, что у тебя получилось, мы найдем ошибку вместе. Или хотя бы только ввод начальных данных сделай и покажи. Остальное доделаем )).
Предпочитаю на "ты".
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
коды стрелок | Lapo4ka | Общие вопросы C/C++ | 9 | 16.04.2017 22:53 |
Проверка стрелок | Ковалёв Александр | Общие вопросы C/C++ | 4 | 04.01.2011 09:01 |
Врашение стрелок | ddeman666 | Помощь студентам | 3 | 16.05.2010 22:37 |
Коды стрелок (Delphi) | VadEr | Помощь студентам | 6 | 13.06.2009 12:57 |
Borland C, перхват нажатий стрелок | Arion | Помощь студентам | 3 | 30.04.2008 12:33 |