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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Классы и обьекты http://www.cyberforum.ru/cpp-beginners/thread691742.html
Написать программу, в которой создаются и разрушаются объекты, определенного пользователем класса. Выполнить исследование вызовов конструкторов и деструкторов. Написал програму,но при компиляции выходит каша#include <cstdlib> #include <iostream> using namespace std; const int MNAME=20; class worker{ public:
C++ clreol, textcolor, Dev C++ Всем доброго времени суток! Есть код следующий код программы: #include<conio.h> #include<graphics.h> #include<process.h> #include<stdio.h> #include<dos.h> #include<stdlib.h> #include<iostream> http://www.cyberforum.ru/cpp-beginners/thread691737.html
использование переменных C++
Программа использует много включаемых файлов, в которых достаточное количество циклов.. Как лучше объявлять переменную i ?? Отдельно в файле файл, всех переменных int i; какой то файл
C++ Файлы(сравнить строки)
/* Написать программу, которая открывает в текстовом режиме произвольный текстовый файл в указанном каталоге, в соответствии с его полным именем, вводимым с клавиатуры. Далее программа должна распечатать все строки файла, имеющие длину, которая задается с клавиатуры. Строки выводятся в порядке их следования в файле. */ #include <stdio.h> #include <stdlib.h>
C++ Структуры: Вывести список из 10 студентов с наибольшим количеством пропусков http://www.cyberforum.ru/cpp-beginners/thread691706.html
В ведомости хранится информация о пропусках студентов: Ф.И.О., факультет, группа, кол-во пропусков. Вывести список из 10 студентов с наибольшим количеством пропусков. С++
C++ как вывести часть массива? например массив А{10 3 4 5 1 9 4} а нужно вывести до его минимального значения, то есть B{10 3 4 5 1} Задача для С++ подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.12.2012, 15:34     Определить наименьшее время, когда часовая и минутная стрелки будут перпендикулярны друг другу
Обнаружил у себя решение, которое забыл опубликовать. Исправляю свою оплошность.
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;
    }
}
 
Текущее время: 03:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru