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

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

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

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

07.11.2009, 10:40. Просмотров 28043. Ответов 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 и осуществить перевод дробной части в минуты и секунды.

Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2009, 10:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод угла из радиан в градусы, минуты и секунды (C++):

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

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

Перевод с радиан в градусы - C++
Дано значение α в радианах α &gt; 0 &lt; 2 ∏. Определите значение этого же угла в градусах. В качестве ∏ использовать 3,14.

Преобразовать координаты из десятичного представления в градусы минуты секунды - C++
Добрый день! Пишу программку, очень маленькую, но мне она нужна для работы, собственно всегда то что мне нужно пересчитывал в Excel'е, но...

Перевод величины угла из радианов в градусы - C++
1)Угол a задан в радианах. Найти его величину в градусах, минутах и секундах.

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

19
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
07.11.2009, 15:37 #2
selevit, какой смысл вычислять число пи, если оно известно?
По поводу дробной части - умножаешь дробную часть на 0,6 и берешь первые две цифры - это количество минут. Отбрасываешь их и проделывая тоже самое второй раз получаешь секунды.

Вроде я не ошибся
2
valeriikozlov
Эксперт С++
4670 / 2496 / 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 в самом коде
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
07.11.2009, 18:15  [ТС] #4
спасибо M128K145, и valeriikozlov!

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

Заранее спасибо
0
M128K145
Эксперт С++
8289 / 3509 / 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; // ----//----
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
07.11.2009, 18:42  [ТС] #6
извиняюсь, вопрос - как найти дробную часть числа?
0
M128K145
Эксперт С++
8289 / 3509 / 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;
1
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 цифр.
из за этого точность вычисления страдает и секунды вычисляются несовсем правильно.

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

Заранее спасибо
0
M128K145
Эксперт С++
8289 / 3509 / 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
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.11.2009, 10:00 #10
http://ru.wikipedia.org/wiki/%D0%9F%D0%B8
0
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
08.11.2009, 13:55  [ТС] #11
спасибо, читал уже
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.11.2009, 02:31 #12
там есть метод итераций каких-то, вроде несложный
1
Adalina
Свободный художник
596 / 27 / 3
Регистрация: 09.10.2009
Сообщений: 214
13.11.2009, 18:36 #13
точное значение пи... пожалуйста - p(пи) = asin(double(1))*2
ведь это один из вариантов нахождения значения пи, не так ли?)). Пропишешь вот такую заморочку перед формулой и в саму формулу по вычислению того, что тебе нужно смело вставляй "p" и все будет)). Попробуй,
selevit, и не забудь сказать спасибо!
1
selevit
79 / 75 / 3
Регистрация: 08.10.2008
Сообщений: 296
13.11.2009, 18:41  [ТС] #14
точное значение пи... пожалуйста
Adalina - если тебе известно, пи - иррациональное число, поэтому точного значени принимать не может

спасибо
0
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, ну ладно... Извини, что спалила твое имя
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2009, 18:50
Привет! Вот еще темы с ответами:

Перевод Секунд в Минуты секунды ,Указатели - C++
вот просто программа с указателями , нужно на подобии сделать программу чтобы она переводила секунды в минуты секунды. ...

Перевод из секунд в часы, минуты, секунды - C++
Видел я тут тучу вариантов решения данной задачи. Но они все не подходят. Нужно решить следующую задачу: На выходе должно...

Перевод секунд в дни часы минуты секунды - C++
int main() { long long int sec; cin &gt;&gt; sec; cout &lt;&lt; sec &lt;&lt; &quot; seconds = &quot; &lt;&lt; sec / 86400 &lt;&lt; &quot; days, &quot;; cout &lt;&lt; (sec %...

Перевод в часы, минуты и секунды для структурных переменных - C++
Дело в том, что неправильно переводит. По идее вроде вычисления должны быть верными, но не работает. Возможно опять моя невнимательность. ...


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
13.11.2009, 18:50
Ответ Создать тему
Опции темы

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