Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
nutius
0 / 0 / 1
Регистрация: 01.06.2011
Сообщений: 60
#1

Определить наименьшее время, когда часовая и минутная стрелки будут перпендикулярны друг другу - C++

08.11.2012, 00:34. Просмотров 1944. Ответов 1
Метки нет (Все метки)

Добрый вечер!

Подскажите, пожалуйста, алгоритм вот такой прожки:

Ввести целые числа m (0 ≤ m ≤ 12) и n (0 ≤ n ≤ 60), которые указывают количество часов и минут соответственно. Определить наименьшее время, которое должно пройти до момента, когда часовая и минутная стрелки будут перпендикулярны друг другу.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2012, 00:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Определить наименьшее время, когда часовая и минутная стрелки будут перпендикулярны друг другу (C++):

Определить наименьшее время до того момента, когда часовая и минутная стрелки расположатся перпендикулярно
Добрый день. Помогите разобраться? есть задача 1) Даны целые числа M и N (0<M<=12, 0<=N<=60), указывающие момент времени: «M часов,...

Определить наименьшее время, которое должно пройти до того момента, когда часовая и минутная стрелки совпадут
1) Даны целые числа M и N (0<M<=12, 0<=N<=60), указывающие момент времени: «M часов, N минут». Определить наименьшее время (число полных...

Определить наименьшее время (число полных минут), которые должны пройти до того момента, когда часовая и минутная стрелки на циферблате совпадут
Нужно ввести целые числа m и n (часы и минуты), 0 <= m <= 11, 0 <= n <= 59, которые определяют время суток. Определить наименьшее время...

Определить наименьшее время до того как часовая и минутная стрелки совпадут
Даны целые числа h,m (0<h<=12,0<=m<=59),указывающие момент времени: h часов,m минут.Определить наименьшее время(число полных минут),которое...

Определить наименьшее время, которое должно пройти до того момента, когда часовая и минутная стрелка на циферблате совпадут
помоги, буду очень благодарна) Записать тернарную операцию для решения данной задачи. Не использовать условный оператор. Составлять...

Определить наименьшее число полных минут до момента, когда часовая и минутная стрелка на циферблате совпадут
Даны целые числа h и m, указывающие момент времени "h часов m минут". Определить наименьшее число полных минут, которые должны пройти до...

1
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
08.12.2012, 15:34 #2
Лучший ответ Сообщение было отмечено nutius как решение

Решение

Обнаружил у себя решение, которое забыл опубликовать. Исправляю свою оплошность.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <complex>
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::complex<double>    T_hand;
/////////////////////////////////////////////////////////////////////////////////////////
const double    PI                                  =   acos(-1.0);
const int       HOURS_PER_REVOLUTION                =   12;
const double    HOUR_HAND_REVOLUTIONS_PER_HOUR      =   1.0 / HOURS_PER_REVOLUTION;
const double    MINUTE_HAND_REVOLUTIONS_PER_HOUR    =   1.0;
 
const double    MINUTE_HAND_RELATIVE_TO_HOUR_HAND_REVOLUTIONS_PER_HOUR  =       MINUTE_HAND_REVOLUTIONS_PER_HOUR
                                                                            -   HOUR_HAND_REVOLUTIONS_PER_HOUR;
 
const int       MINUTES_PER_HOUR                    =   60;
const double    RADIANS_PER_REVOLUTION              =   PI * 2;
const double    TARGET_ANGLE_IN_RADIANS             =   PI / 2;
/////////////////////////////////////////////////////////////////////////////////////////
double  get_time_in_hours_during_which_angle_between_hour_and_minute_hands_will_reach_value
    (
        double  cur_time_in_hours,
        double  target_angle_in_radians
    )
{
    double  minute_hand_angle_in_radians    =       fmod
                                                        (
                                                            cur_time_in_hours,
                                                            1.0
                                                        )
                                                *   RADIANS_PER_REVOLUTION;
 
    T_hand  minute_hand                     =   std::polar
                                                    (
                                                        1.0,
                                                        minute_hand_angle_in_radians
                                                    );
 
    double  hour_hand_angle_in_radians      =       cur_time_in_hours
                                                /   HOURS_PER_REVOLUTION
                                                *   RADIANS_PER_REVOLUTION;
 
    T_hand  hour_hand                       =   std::polar
                                                    (
                                                        1.0,
                                                        hour_hand_angle_in_radians
                                                    );
 
    double  cur_angle                       =   arg( minute_hand / hour_hand );
    double  angular_distance_in_radians     =   target_angle_in_radians - cur_angle;
 
    if  (
            abs( cur_angle ) > target_angle_in_radians
        )
    {
        angular_distance_in_radians -= target_angle_in_radians * 2;
 
        if( cur_angle > 0 )
        {
            angular_distance_in_radians += RADIANS_PER_REVOLUTION;
        }
    }
 
    return      angular_distance_in_radians
            /   RADIANS_PER_REVOLUTION
            /   MINUTE_HAND_RELATIVE_TO_HOUR_HAND_REVOLUTIONS_PER_HOUR;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    for(;;)
    {
        std::locale::global(std::locale(""));
        int     hours   =   0;
 
        std::cout   <<  "Введите время:"
                    <<  std::endl;
        do
        {
            std::cout   <<  '\t'
                        <<  "часы (0.."
                        <<  HOURS_PER_REVOLUTION - 1
                        <<  "):"
                        <<  '\t';
 
            std::cin    >>  hours;
        }while  (   
                        hours   <   0
                    ||  hours   >=   HOURS_PER_REVOLUTION
                );
 
        std::cout   <<  std::endl;
        int     minutes     =   0;
 
        do
        {
            std::cout   <<  '\t'
                        <<  "минуты (0.."
                        <<  MINUTES_PER_HOUR - 1
                        <<  "):"
                        <<  '\t';
 
            std::cin    >>  minutes;
        }while  (
                        minutes     <   0
                    ||  minutes     >=   MINUTES_PER_HOUR
                );
 
        double  cur_time_in_hours   =   hours + double(minutes) / MINUTES_PER_HOUR;
 
        double  res_time_in_hours   =   get_time_in_hours_during_which_angle_between_hour_and_minute_hands_will_reach_value
                                            (
                                                cur_time_in_hours,
                                                TARGET_ANGLE_IN_RADIANS
                                            );
 
        std::cout   <<  std::endl
                    <<  "Стрелки часов будут перпендикулярны друг другу через "
                    <<  res_time_in_hours
                    <<  " часов."
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl
                    <<  std::endl;
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2012, 15:34
Привет! Вот еще темы с решениями:

Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу
11. Определить время, через которое встретятся два тела, равноускорен¬но движущиеся навстречу друг другу, если известны их начальные...

Вычислить время встречи автомобилей, движущихся равноускоренно навстречу друг другу
Составьте прорамму для вычисления времени t встречи автомобилей,движущихся равноускоренно навстречу друг другу,если известны их скорости V1...

Определить какое наибольшее число подряд идущих элементов последовательности равны друг другу
Добрый вечер, решил задачку, но выдаёт ошибку на пятом тесте. У меня два вопроса: Есть ли более простой способ решения и, собственно,...

Определить, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определить, какое наибольшее число подряд идущих элементов этой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru