Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

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

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

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.12.2012, 15:34 #2
Обнаружил у себя решение, которое забыл опубликовать. Исправляю свою оплошность.
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
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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