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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
#1

Вычислить угол под которым брошено тело - C++

23.08.2012, 21:29. Просмотров 2698. Ответов 22
Метки нет (Все метки)

Всем доброго время суток. Написать программу, в которой по известной начальной скорости V и времени полета T определяется угол http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha под которым тело брошено по отношению к горизонту (воспользоваться следующим соотношением
http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha =\arcsin(\frac{g*T}{2*V})). Вот сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<cmath>
#include<iostream>
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
 const  double PI = 3.1415;
 const  double g = 9.8;
 double V, T, result, alpha;
   cout<<" Введите скорость:  ";
   cin>>V;
cout<<" Введите время:  ";
   cin>>T;
result = (g*T)/(2*V);
 ( result < -1  ||  result  > 1 )? (cout<<" Не верное значение:  "<<endl, exit(0)):cout<<" Такого угла не существует!  ";
  alpha = asin (result) * 180.0 / PI;
   cout<<"Значение угла равно: "<<alpha;
   system("pause");
   return 0;
}
Но она работает не правильно. Как сделать при значениях отношения http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{g*T}{2*V} меньших -1 или больших 1 выскакивало сообщение: " Не верное значение! Такого угла не существует! Введите верные значения " и только после значений удовлетворяющих данному условию, выводилось значение угла в градусах программа завершалась бы. У меня работает с точностью наоборот. При значениях V=98 и T=10 значения отношение получается 0.5 что соответствует 30 градусам у меня выскакивает ошибка внизу. Не знаю почему???? Помогите пожалуйста???? Заранее огромное спасибо за помощь.
0
Миниатюры
Вычислить угол под которым брошено тело  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2012, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить угол под которым брошено тело (C++):

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

Задача по физике. С некоторой высоты под углом к горизонту брошено тело. - C++
С некоторой высоты h_0 под углом к горизонту \alpha со скоростью U брошено тело. Вычислить,какое расстояние по горизонтали оно пролетит...

Тело падает под действием силы тяжести - C++
Тело падает под действием силы тяжести с нулевой начальной скорости. Движение описывается следующей системой дифференциальных уравнени ...

Вывести полное имя программы, под которым она была запущена. - C++
Здравствуйте! Пожалуйста, помогите с написанием вот такой программы: Вывести полное имя программы, под которым она была запущена....

Вычислить силы, действующие на тело - C++
Нужна помощь 1) На тело действуют две силы, заданные векторами А и В найти а)величину этих сил, б)направление(угол относительно оси...

Вычислить угол между прямыми - C++
Заданы уравнения двух пересекающихся прямых на плоскости: y1=k1x+b1, y2=k2x+b2. Напишите программу, вычисляющую угол между ними в градусах...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
23.08.2012, 21:53 #2
Запутанный алгоритм у вас, но в строке 16 у вас обязательно выведется либо "Не верное значение", либо "Такого угла не существует". Почитайте совсем немного про условную операцию и сразу отыщите ошибку. А лучше замените все на обычный опертор if ... else ...
0
Smirnov_Uriy
5 / 5 / 1
Регистрация: 30.12.2011
Сообщений: 11
23.08.2012, 22:48 #3
Попробуйте так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
 
int main ()
{
    double a, T, V, result;
    const double g = 9.8;
    const double Pi = 3.14;
    setlocale (LC_ALL," ");
    cout << "Введите скорость и время: ";
    cin >> V >> T;
    result = (g*T)/(2*V);
    if (result < -1 && result >1){
        cout << "Не верное значение!" << endl;
    }
    else {
        cout << "Значение угла = " << asin(result)*180/Pi <<endl;
    }
    return 0;
}
1
SiQeR
11 / 1 / 1
Регистрация: 24.12.2009
Сообщений: 7
24.08.2012, 02:38 #4
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
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
 
int main ()
{
    double  T, V, result;
    const double g = 9.8;
    const double Pi = acos(-1.0);
    setlocale (LC_ALL," ");
    cout << "Введите скорость и время: ";
    cin >> V >> T;
    result = (g*T)/(2*V);
    if (result < -1 || result >1)
    {
        cout << "Не верное значение!" << endl;
    }
    else 
    {
        cout << "Угол = " << asin(result) * 180 / Pi <<endl;
    }
    return 0;
}
Правильно работающая программа...
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 10:45 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cmath>
#include <iostream>
using namespace std;
 
int main()
{
    double g = 9.81;
    double V, T;
    double angle;
    cout<<"V = ";cin>>V;
    cout<<"T = ";cin>>T;
 
    if(1 < fabs(g*T/(2*V)))
        cout<<"Parameters are not show flying!\n";
    else
    {
        angle = asin(g*T/(2*V));
        cout<<"angle (radians) = "<<angle<<endl;
        cout<<"angle (degrees) = "<<angle*(90/asin(1.0))<<endl;
    }
    return 0;
}
1
Миниатюры
Вычислить угол под которым брошено тело  
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
24.08.2012, 13:00  [ТС] #6
-=ЮрА=- полностью с тобой согласен. Задача из того же самого Васильева А.Н. "Самоучитель C++ с задачами и примерами". Глава I часть I "Процедурное программирование в C++". Используя соотношения: http://www.cyberforum.ru/cgi-bin/latex.cgi?{v}_{x}={v}_{0}*\cos (\alpha ) и http://www.cyberforum.ru/cgi-bin/latex.cgi?{v}_{y}={v}_{0}*\sin (\alpha )-g*t В момент падения {v}_{y}=0, отсюда получаем:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{v}_{0}*\sin (\alpha )-g*t=0 \Rightarrow \sin (\alpha )= (g*t)/{v}_{0} \Rightarrow \alpha = \arcsin ((g*t)/{v}_{0}) Почему он использует соотношение: http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha =\arcsin (\frac{g*T}{2*V}) я так и не понял???? И еще -=ЮрА=- и SiQeR объясните мне пожалуйста почему вы используете при вычислении arcsin: SiQeR
C++
1
const double Pi = acos(-1.0);
-=ЮрА=-
C++
1
 cout<<"angle (degrees) = "<<angle*(90/asin(1.0))<<endl;
. Я не понимаю???? -=ЮрА=- у меня к тебе еще один вопрос, в твоей программе когда я ввел значения V=4.9 и T=1 результат равен 1=
http://www.cyberforum.ru/cgi-bin/latex.cgi?\arcsin ({90}^{0}) программа выдает сообщение: "Parameters are not show flying!"???? Заранее огромное спасибо.
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 13:15 #7
Цитата Сообщение от isaak Посмотреть сообщение
объясните мне пожалуйста почему вы используете при вычислении arcsin: SiQeR
Код C++
1
const double Pi = acos(-1.0);
-=ЮрА=-
Код C++
1
*cout<<"angle (degrees) = "<<angle*(90/asin(1.0))<<endl;
. Я не понимаю???
- потому что все math.h ный арксинус возвращает величину угда в радианах, и чтобы перейти к градусам нужно радианы*90/(Пи/2) как это делаю я, либо радианы*180/(Пи) как это делает SiQeR. На счёт формулы - она выводится, по свободе покажу, пока мне не до этого
1
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 13:26 #8
Цитата Сообщение от isaak Посмотреть сообщение
программа выдает сообщение: "Parameters are not show flying!"???? Заранее огромное спасибо
- во первых надо вводить хотябы 4,905 (у меня ведь g = 9.81
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
double g = 9.81;
), а во вторых - по моему именно с тобой мы обсуждали, что в машинном представлении числа с плавающей точкой представляются несколько по иному нежели мы привыкли: скажем для нашей железяки 1 и 0,99(9) в 15 знаке будут одним и тем же. Вот смотри отработку для близких к 90 градусам параметрах
1
Миниатюры
Вычислить угол под которым брошено тело  
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
24.08.2012, 14:06  [ТС] #9
-=ЮрА=- спасибо за ответ. Но не совсем понятно, чтобы перейти к градусам нужно радианы*90/(Пи/2), либо радианы*180/(Пи) запись должна выглядеть вот так:
C++
1
2
3
#define PI 3.1416
cout<<"angle (degrees) = "<<angle*(180.0 / PI)<<endl;
cout<<"angle (degrees) = "<<angle*(90.0 / PI)<<endl;
Вроде бы так????
Хотя нет не правильно! Здесь PI = 3.1416 в радианах. Получается полная чушь градусы делим на радианы.
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 14:21 #10
isaak, asin(1.0) равен Пи/2
1
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
24.08.2012, 14:40  [ТС] #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
isaak, asin(1.0) равен Пи/2
Это я знаю, не совсем понятно как C++ переводить из радианов в градусы???? Значить не всегда нужно умножать на 180.0 / PI ???? Нужно использовать табличные значения тригонометрических функций???? Хотя здесь: http://www.cplusplus.com/reference/clibrary/cmath/asin/ показано вот так???? Че то я совсем запутался????
0
-=ЮрА=-
Заблокирован
Автор FAQ
24.08.2012, 15:16 #12
isaak, еще раз:мы вычислили у=asin(x) получили РАДИАНЫ.Как переводить из радиан в градусы?Ответ:общепринятая формула перевода:
радианы*360/(2*Пи)
Теперь раскроем скобки:
радианы*180/(Пи) или же радианы*90/(Пи/2) вот ее я и использовал в коде.У нас asin(1.0) равен Пи/2 тобишь чтобы перевести y=asin(x) из радиан в градусы достаточно проделать следующее у*90/asin(1.0) что тут непонятного?
1
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
24.08.2012, 17:06  [ТС] #13
-=ЮрА=- за ответ. Но все равно не понятно????? В приведенной мною выше ссылке: http://www.cplusplus.com/reference/clibrary/cmath/asin/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <math.h>
 
#define PI 3.14159265
 
int main ()
{
  double param, result;
  param = 0.5;
  result = asin (param) * 180.0 / PI;
  printf ("The arc sine of %lf is %lf degrees\n", param, result );
  return 0;
}
В этом коде 180 на 3.14159265. А у тебя с SiQeR получается следующее:
asin(1.0) равен Пи/2 = 90 градусов 90 деленное на 90 это 1; acos(-1.0) = Пи = 180 градусов 180 деленное на 180 тоже 1. Любое число умноженное на 1 есть само число. И ни какого нет перевода из радиан в градусы. Или здесь не видно как работает преобразование из радиан в градусы????
0
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2012, 15:14 #14
Цитата Сообщение от isaak Посмотреть сообщение
#define PI 3.1416
cout<<"angle (degrees) = "<<angle*(180.0 / PI)<<endl;
cout<<"angle (degrees) = "<<angle*(90.0 / (PI/2))<<endl;
isaak, я правда не мог понять какой момент тебя смущает. Попробую написать ещё раз
есть радианы которые возвратил арксинус назовём из РАДИАНЫ. Теперь мы хотим пропечатать угол в градучах мы делаем следующее
C++
1
2
ГРАДУСЫ = РАДИАНЫ*(180/acos(-1));
ГРАДУСЫ = РАДИАНЫ*( 90/asin(1.0));
что непонятного в этих строках?

Добавлено через 1 минуту

Не по теме:

аркосинус(1) = Пи
арксинус(1) = Пи/2
т.е аркосинус(1) НЕ РАВЕН арксинус(1) предположу что это смущало

0
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
25.08.2012, 17:40  [ТС] #15
-=ЮрА=- вопрос в следующем как программа вычисляет acos(-1) = 180 или acos(-1) = PI = 3.1416?
Если вычисляет как:
acos(-1) = 180, тогда:
ГРАДУСЫ = РАДИАНЫ*(180/acos(-1))= РАДИАНЫ*(180/PI) = РАДИАНЫ*(180/180) = РАДИАНЫ*1;
ГРАДУСЫ = РАДИАНЫ*( 90/asin(1.0)) = РАДИАНЫ*( 90/(PI /2)) = РАДИАНЫ*(90/90) =РАДИАНЫ*1;
PI = 3.1416
Если вычисляет как acos(-1) = 180 = PI = 3.1416:
ГРАДУСЫ = РАДИАНЫ*(180/acos(-1))= РАДИАНЫ*(180/PI) = РАДИАНЫ*(180/3.1416);
ГРАДУСЫ = РАДИАНЫ*( 90/asin(1.0)) = РАДИАНЫ*( 90/(PI /2)) = РАДИАНЫ*(180/PI) =РАДИАНЫ*(180/3.1416);

Нужно делить на 3.1416, чтобы получить ГРАДУСЫ ???? Вот в чем вопрос.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2012, 17:40
Привет! Вот еще темы с ответами:

Лежат ли точки на одной прямой и вычислить угол - C++
Написал программу, но не пойму в чём ошибка( #include &lt;iostream.h&gt; #include &lt;math.h&gt; void main() {int x1, x2, x3; int y1, y2, y3;...

Нада вычислить угол если есть косинус этого угла - C++
Нада вычислить угол если есть косинус этого угла вот код: #include &lt;math.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Вычислить площадь четырехугольника, если угол между сторонами длиной X и Y - прямой - C++
Даны числа X,Y,Z,T - длины сторон четырехугольника. Вычислить его площадь, если угол между сторонами длиной X и Y - прямой.

Вычислить площадь четырехугольника, если его угол между сторонами длиной X и Y — прямой - C++
текст задачи: Даны числа X,Y,Z,T - длины сторон четырехугольника. Вычислить его площадь, если его угол между сторонами длиной X и Y -...


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

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

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