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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 210, средняя оценка - 5.00
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
#1

Перевод угла из радиан в градусы, минуты и секунды - C++

07.11.2009, 10:40. Просмотров 27322. Ответов 19
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const double pi = 3.14;
    double rad;
    cout<<"Введите значение угла в радианах: "<<endl;
    cin>>rad;
    double result = 180/pi*rad;
    cout<<"Значение угла в градусах = "<<result<<endl;
 
 
}
P.S. Уважаемые программисты, пожалуйста не утруждайте себя изменением моего кода и проверкой, просто посоветуйте как вычислить максимально точное pi и осуществить перевод дробной части в минуты и секунды.

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2009, 10:40     Перевод угла из радиан в градусы, минуты и секунды
Посмотрите здесь:
C++ Перевести радианную меру угла в градусы, минуты и секунды
C++ Написать программу, переводящую размер угла из радиан в градусы с использованием дружественных функций
C++ Перевод с радиан в градусы
Преобразовать координаты из десятичного представления в градусы минуты секунды C++
Перевод величины угла из радианов в градусы C++
C++ Перевод из секунд в часы, минуты, секунды
Перевод секунд в часы,минуты и секунды C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.11.2009, 15:37     Перевод угла из радиан в градусы, минуты и секунды #2
selevit, какой смысл вычислять число пи, если оно известно?
По поводу дробной части - умножаешь дробную часть на 0,6 и берешь первые две цифры - это количество минут. Отбрасываешь их и проделывая тоже самое второй раз получаешь секунды.

Вроде я не ошибся
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
07.11.2009, 18:02     Перевод угла из радиан в градусы, минуты и секунды #3
посоветуйте как вычислить максимально точное pi
в VS 2008 в math.h есть строка:
C++
1
#define M_PI       3.14159265358979323846
Если у Вашего компилятора нет значения pi в math.h, то можете просто написать эту строку в начале кода и пользоваться M_PI в самом коде
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
07.11.2009, 18:15  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #4
спасибо M128K145, и valeriikozlov!

По поводу дробной части - умножаешь дробную часть на 0,6 и берешь первые две цифры - это количество минут. Отбрасываешь их и проделывая тоже самое второй раз получаешь секунды.
есть вопрос - ведь дробная часть может быть разной в ответе, в зависимости от введенного пользователем числа, значит, как я понимаю надо округлить дробное число до 4-х знаков после запятой, подскажите, есть ли такая функция в C++? В Паскале есть - это я точно помню, значит и в С++ должна быть.

Заранее спасибо
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.11.2009, 18:26     Перевод угла из радиан в градусы, минуты и секунды #5
selevit, для вычисления округлять не надо. Делай так:
есть дробная часть(float dr), минуты (int min) и секунды(int sec).
C++
1
2
3
4
5
6
dr *= 60; //т.е.
//dr *= 0.6; для получение минут в дробной части и
//dr *= 100; для получение минут в целой части
min = (int)dr; //отбрасываем всю дробную часть
dr *= 60; //тоже самое что и для минут
sec = (int)dr; // ----//----
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
07.11.2009, 18:42  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #6
извиняюсь, вопрос - как найти дробную часть числа?
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.11.2009, 19:33     Перевод угла из радиан в градусы, минуты и секунды #7
C++
1
2
double result = 180/pi*rad;
double dr = result - (int)result;
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
07.11.2009, 20:10  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #8
Спасибо всем, особенно M128K145! вот что примерно получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <math.h> // Для floor(grad).
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    double rad;
    cout<<"Введите значение угла в радианах: "<<endl;
    cin>>rad;
    const double pi = 3.1415926535897932384626433832795;
    double grad = 180/pi*rad;
    double dr = grad - (int)grad;
    dr *= 60;
    int min = int(dr);
    dr *= 60;
    int sec = int(dr);
    cout<<"Значение угла в градусах = "<<floor(grad)<<" Градусов "<<min<<" Минут "<<sec<<" Секунд. "<<endl;;
 
 
}
Все работает правильно, но есть небольшая проблемка - что почему то все число вместе с дробной частью никогда не превышает 6 знаков при выводе, т.е. к примеру такой код

C++
1
2
3
    double test;
    cin>>test;// Если ввести к примеру 1.1234567890
    cout<<test;// То выведется только 1.12345
при вводе может иметь сколько угодно знаков, а выводится только первые 6 цифр.
из за этого точность вычисления страдает и секунды вычисляются несовсем правильно.

подскажите пожалуйста, что за парадокс?

Заранее спасибо
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.11.2009, 20:28     Перевод угла из радиан в градусы, минуты и секунды #9
selevit, точнее даже так
C++
1
2
3
4
    double dr = grad - (int)grad;
    dr *= 3600;
    int min = dr / 60;
    int sec = dr - min * 60;
Если посмотреть в дебаггере, то pi = 3.1415926535897931
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.11.2009, 10:00     Перевод угла из радиан в градусы, минуты и секунды #10
http://ru.wikipedia.org/wiki/%D0%9F%D0%B8
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
08.11.2009, 13:55  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #11
спасибо, читал уже
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.11.2009, 02:31     Перевод угла из радиан в градусы, минуты и секунды #12
там есть метод итераций каких-то, вроде несложный
Adalina
Свободный художник
596 / 27 / 3
Регистрация: 09.10.2009
Сообщений: 214
13.11.2009, 18:36     Перевод угла из радиан в градусы, минуты и секунды #13
точное значение пи... пожалуйста - p(пи) = asin(double(1))*2
ведь это один из вариантов нахождения значения пи, не так ли?)). Пропишешь вот такую заморочку перед формулой и в саму формулу по вычислению того, что тебе нужно смело вставляй "p" и все будет)). Попробуй,
selevit, и не забудь сказать спасибо!
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
13.11.2009, 18:41  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #14
точное значение пи... пожалуйста
Adalina - если тебе известно, пи - иррациональное число, поэтому точного значени принимать не может

спасибо
Adalina
Свободный художник
596 / 27 / 3
Регистрация: 09.10.2009
Сообщений: 214
13.11.2009, 18:50     Перевод угла из радиан в градусы, минуты и секунды #15
Цитата Сообщение от valeriikozlov Посмотреть сообщение
1
#define M_PI 3.14159265358979323846
кстати, за вот такую проделку учителЪ по основам программирования долго иронизировал в мою сторону... я тоже сначала искала легкие пути

Добавлено через 2 минуты
selevit, Ты просил "максимально точное" значение пи, Серег Так что не цепляйся к словам.



Добавлено через 4 минуты
selevit, ну ладно... Извини, что спалила твое имя
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
13.11.2009, 19:18  [ТС]     Перевод угла из радиан в градусы, минуты и секунды #16
selevit, ну ладно... Извини, что спалила твое имя
Adalina, не понимаю о чем Вы? что значит спалила, если оно есть в моем профиле?
Adalina
Свободный художник
596 / 27 / 3
Регистрация: 09.10.2009
Сообщений: 214
14.11.2009, 22:27     Перевод угла из радиан в градусы, минуты и секунды #17
Серег, сейчас и фамилию спалю вместе с возрастом, так что не нервируй меня
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
14.11.2009, 23:15     Перевод угла из радиан в градусы, минуты и секунды #18
selevit, Adalina, есть все же ЛС
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
14.11.2009, 23:37     Перевод угла из радиан в градусы, минуты и секунды #19
Цитата Сообщение от Adalina Посмотреть сообщение
точное значение пи... пожалуйста - p(пи) = asin(double(1))*2
На всякий случай сообщаю: сначало нашли p(пи) (и то не окончательно, до сих пор ищут все с большей точностью). А после этого (и в ЭВМ тоже так устроено) вычисляют sin(1), с помощью уже известного p(пи).
Так что этот Ваш вариант нахождения "точного значения пи" - он на самом деле не вариант вычисления, а нетипичный вариант использования уже заложенного в ЭВМ значения p(пи).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2009, 17:24     Перевод угла из радиан в градусы, минуты и секунды
Еще ссылки по теме:
Перевод Секунд в Минуты секунды ,Указатели C++
C++ Перевод секунд в дни часы минуты секунды
Перевод в часы, минуты и секунды для структурных переменных C++
C++ Перевод секунд (произвольное целое число) в часы, минуты и секунды
C++ Как перевести секунды в часы, минуты и секунды

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

Или воспользуйтесь поиском по форуму:
Adalina
Свободный художник
596 / 27 / 3
Регистрация: 09.10.2009
Сообщений: 214
16.11.2009, 17:24     Перевод угла из радиан в градусы, минуты и секунды #20
valeriikozlov, насчет "точного значения" я вроде поправилась... Так что, прошу Вас, не будьте вторым, кто указывает на одну и ту же ошибку)) Ну или сразу расстреляйте меня за недописанное "максимально"......
Yandex
Объявления
16.11.2009, 17:24     Перевод угла из радиан в градусы, минуты и секунды
Ответ Создать тему
Опции темы

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