Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> встреча стрелок на часах 
V
    Опции темы
argamidon
Дата 2.12.2011, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 2.12.2011

Репутация: нет
Всего: нет



заранее извиняюсь если ошибся темой или резделом.
даны целые числа h(0;12] и m[0;59], указывающие на момент времени. Помогите определить наименьшее время (число полных минут), которое пройдёт до момента встречи(совпадения) стрелок в одной точке.

когда я пытался решить эту задачу, я шёл примерно по такому пути: 
 определял точные угловые координаты часовой и минутной стрелки, и далее запускал цикл до тех пор пока угловое значение не будет равным. тоесть я прибавлял за каждую итерацию угловой расстояние к часовой стрелке по пол градуса(именно столько часовая проходит за одну минуту) и по 6 градусов к минутной стелке(именно столько она проходит за минуту). Кое-что конечно у меня получислоь и я хотел бы знать, если способ прощу и правильнее моего . Заранее извиняюсь за нечитаемость листинга(я только учусь). И получилось примерное такое:
Код

class BodyPosition{
public static void main(String args[]){
 
    
    double h=9,m=5,
            
            h1,m1,posh,posm; // m1 - Движение ачсовой стрелки за минуту, град. 
    double m11; //  m11 - движение минутной стрелки за минуту, (град.). 
    
    h1=360/12; //h1 - это движение часовой стрелки за один час
    
    m1=h1/60;
    
    m11=360/60;
    
    posh=h*h1+m1*m; //позиция часовой стрелки в градусах с начала часа.
    posm=m*m11; // поз. минутной стрелки в град.  с начала часа.
    
   
    System.out.println("позиция часовой стрелки перед совпанием "+posh+" ... "+h+" часов");
    System.out.println("позиция минутной стрелки перед совпанием "+posm+" ... "+m+" минут");
  
    for(;posh>=posm;)
    {
        posh+=m1;
        posm+=m11;
    }
    
    h=(posh -posh%h1)/h1;
     m=(posm-posm%m11)/m11;
     
    System.out.println("позиция часовой стрелки после совпания "+posh+" ..."+h+" часов" );
    System.out.println("позиция минутной стрелки после совпанея "+posm+" ..."+m+" минут" );
    
}}

PM MAIL   Вверх
AlexKozlov
Дата 2.12.2011, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 16.12.2008

Репутация: 1
Всего: 1



может вспомнить математику, составить и решить уравненьице? Или задача стоит сделать именно через ж?

да и кстати, числа с плавающей запятой лучше сравнить примерно так |a-b|<точность. Где точность - некое отличное от нуля, но достаточно малое для ваших целей число
иначе вы можете промахнуться, в вашем случае на минуту.

Это сообщение отредактировал(а) AlexKozlov - 2.12.2011, 13:12
PM MAIL   Вверх
argamidon
Дата 2.12.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 2.12.2011

Репутация: нет
Всего: нет



спасибо за советы.  smile 
вот я и создал тему для того чтобы знать что за уравнеице надо составить. самому в башку ничего не приходит.  smile 

Это сообщение отредактировал(а) argamidon - 2.12.2011, 13:32
PM MAIL   Вверх
Mirkes
Дата 3.12.2011, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 586
Регистрация: 18.8.2011
Где: Красноярск

Репутация: 7
Всего: 17



Вообще-то задача решается достаточно просто
Сначала переведем часы и минуты в углы и посчитаем, насколько минутная стрелка отстает от часовой (именно отстает, если угол часовой стрелки составляет 297 градусов, а угол минутной - 324 градусов, то отставание составляет 360+297-324=333 градусов)
Далее угол часовой стрелки увеличивается на 0.5 градуса, а минутной на 6 градусов. Итого расстояние между ними сокращается на 5.5 градуса в минуту.
Следовательно минимальное число минут, через которое минутная стрелка догонит часовую составляет отставание минутной стрелки деленное на 5.5.
Число полных минут - целая часть от этого числа.
Использовать лучше не плавающие типы, а целые. Например
Код

class BodyPosition{
public static void main(String args[]){
  int h=9, m=5;
  int ah=3600/12*h+3600/12/60*m; //угол часовой стрелки в десятых долях градуса
  int am=3600/60*m; // угол минутной стрелки в десятых долях градуса
  int da=ah-am;  // отставание минутной стрелки от часовой
  if (da<0) {
     da=da+3600;
  }
  int mins=da/55; // число ПОЛНЫХ минут до встречи стрелок. стрелки встретятся либо точно в этот момент, либо в течении следующей минуты
  System.out.println("До встречи пройдет "+mins+" полных минут");
}
}



--------------------
Mirkes
PM MAIL   Вверх
argamidon
Дата 4.12.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 2.12.2011

Репутация: нет
Всего: нет



Mirkes спасибо.
я пару дней назад уже решил эту задачу и получи точно такой же ответ 44 минуты. мой второй способ которым я решил задачу очень похож на ваш.
правда я не использовал "встречную скорость 5,5 градусов". там где комметарии, это я пытался выводить формулу. уравнение тоесть , изза отсутствия которого я решал эту задачу с помощь цикла(первый пост). конечно коряво, и через Ж. но работает  smile 
вот листинг =)


Код

class BodyPosition{
public static void main(String args[]){
 
    
    double h=9,m=5,
            
            h1,m1,posh,posm,s1,s2; // m1 - Движение ачсовой стрелки за минуту, град. 
    double m11; //  m11 - движение минутной стрелки за минуту, (град.).  ==6
    
    h1=360/12; //h1 - это движение часовой стрелки за один час
    
    m1=h1/60;
    
    m11=360/60;
    
    posh=h*h1+m1*m; //позиция часовой стрелки в градусах с начала часа.
    posm=m*m11; // поз. минутной стрелки в град.  с начала часа.
    
   
    System.out.println("позиция часовой стрелки перед совпанием "+posh+" ... "+h+" часов");
    System.out.println("позиция минутной стрелки перед совпанием "+posm+" ... "+m+" минут");
  
    
    /**** формула в градусах: 
    posh+s2=posm+s1;
     * s2=s1/12
     * posh+s1/12=posm+s1;
     * 12*posh+s1=12*posm+12*s1;       
     * -11*s1=12*posm-12*posh
     * */
    s1=(12*posh-12*posm)/11;
     
     
    
    
    
    h=(posh-posh%h1)/h1;
     m=(s1-s1%m11)/m11;
     
    System.out.println("позиция часовой стрелки после совпания "+posh+" ..."+h+" часов" );
    System.out.println("позиция минутной стрелки после совпанея "+s1+" ..."+m+" минут" );
    
}}



Это сообщение отредактировал(а) argamidon - 4.12.2011, 18:34
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.