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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
lFreeManl
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 115
#1

Задача вычисляющая расстояние которое пролетает камень. - C++

23.01.2012, 20:04. Просмотров 2568. Ответов 22
Метки нет (Все метки)

Помогите разработать программу, вычисляющую расстояние, которое пролетит тело вдоль горизонтальной оси, брошенное в вакууме под углом α к горизонту с некоторой начальной скоростью Vo.Угол и начальная скорость вводятся пользователем из стандартного потока ввода. Угол задается в градусах, начальная скорость – в метрах в секунду. Ускорение свободного падения равно 9,8 м/с2.
Программа должна вычислять расстояние, непрерывно запрашивая величину угла и начальную скорость до тех пор, пока пользователь не введет слово exit.
Буду очень благодарен за помощь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2012, 20:04     Задача вычисляющая расстояние которое пролетает камень.
Посмотрите здесь:
C++ Функция вычисляющая расстояние между двумя точками
Пролетает cin >> C++
C++ пролетает gets в теле switch
Получить время за которое выполнена задача C++
Пролетает cin, после того как goto возвращается в начало программы C++
Задача "Гигабашня": минимальное расстояние до этажа со счастливым номером C++
Задача по физике (Определить силу притяжения между телами массы m1 и m2, расстояние между которыми r) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lFreeManl
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 115
24.01.2012, 13:17  [ТС]     Задача вычисляющая расстояние которое пролетает камень. #16
ааааа,ясно=)
-=ЮрА=-
Заблокирован
Автор FAQ
24.01.2012, 13:21     Задача вычисляющая расстояние которое пролетает камень. #17
Цитата Сообщение от lFreeManl Посмотреть сообщение
ааааа,ясно=)
ну т.е. если ті допустим не хотел выходить а введёшь случайно что то неверно(ну ляжет случайно рука на кейпад), то программа выйдет, а так выйдет именно по exit
lFreeManl
10 / 10 / 1
Регистрация: 27.11.2011
Сообщений: 115
24.01.2012, 13:28  [ТС]     Задача вычисляющая расстояние которое пролетает камень. #18
уже понял)ток что за такая функция bool bRepeate = true;что она делает?)
-=ЮрА=-
Заблокирован
Автор FAQ
24.01.2012, 13:44     Задача вычисляющая расстояние которое пролетает камень. #19
Цитата Сообщение от lFreeManl Посмотреть сообщение
ток что за такая функция bool bRepeate = true;что она делает?)
- да какая же это функция это переменная тип bool до тех пор пока не ввели exit цикл работает как только ввели exit значение переменной становится false
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(strcmp(input,"exit") == 0)
* * * * * * * * * * * * * * * * bRepeate = false;
и след итерацию цикл уже не отрабатывает

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
while(bRepeate)
* * * * {
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
24.01.2012, 16:34     Задача вычисляющая расстояние которое пролетает камень. #20
После слов
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
и второй - он то нам и нужен
выражение для L неверно. 2 * tg(a) нужно записать в числителе, а (1 + tg^2(a)) - в знаменателе (и v0 там должно быть в квадрате). Именно поэтому результаты у вас не совпадают с вышеприведенными программами.

Добавлено через 9 минут
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
127
128
129
/////////////////////////////////////////////////////////////////////////////////////////
//Разработать программу, вычисляющую расстояние, которое пролетит тело вдоль 
//горизонтальной оси, брошенное в вакууме под углом О± к горизонту с некоторой 
//начальной скоростью Vo.Угол и начальная скорость вводятся пользователем 
//из стандартного потока ввода. Угол задается в градусах, начальная скорость – 
//в метрах в секунду. Ускорение свободного падения равно 9,8 м/с2.
//Программа должна вычислять расстояние, непрерывно запрашивая величину угла 
//и начальную скорость до тех пор, пока пользователь не введет слово exit.
/////////////////////////////////////////////////////////////////////////////////////////
#define _USE_MATH_DEFINES
/////////////////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
typedef double          T_real;
/////////////////////////////////////////////////////////////////////////////////////////
bool  input_real
    (
        const T_str&    prompt,
        T_real&         real_val
    )
{
    std::cout << prompt;
    return (std::cin >> real_val) != 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_real  get_horis_dist
    (
        T_real  alpha,
        T_real  initial_speed
    )
{
    const T_real    g                   =   9.81;
    const int       DEGREES_PER_PI      =   180;
    T_real          alpha_in_radians    =   alpha / DEGREES_PER_PI * M_PI;
 
    return          initial_speed 
                *   initial_speed 
                *   sin(2 * alpha_in_radians) / g;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  input_initial_speed(T_real&  initial_speed)
{
    const T_real        INITIAL_SPEED_MIN   = 0;    
    bool                good_input          = false;
    bool                value_is_correct    = false;
    std::ostringstream  sout;
    sout    << "Введите скорость >= "
            <<  INITIAL_SPEED_MIN
            <<  " (м/c):\t\t\t";
    do
    {
        good_input  =   input_real
                            (
                                sout.str(),
                                initial_speed                
                            );
 
        value_is_correct = INITIAL_SPEED_MIN <= initial_speed;
 
    }while(
                good_input
            &&  !value_is_correct
          );
 
    return  good_input;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool  input_alpha(T_real&  alpha)
{
    const T_real        ALPHA_MIN           = 0;
    const T_real        ALPHA_MAX           = 180;
    bool                good_input          = false;
    bool                value_is_correct    = false;
    std::ostringstream  sout;
    sout    << "Введите угол в градусах из отрезка ["
            << ALPHA_MIN
            << ", " 
            << ALPHA_MAX
            << "]:\t";
 
    do
    {
        good_input  =   input_real
                            (
                                sout.str(),
                                alpha
                            );
 
        value_is_correct =      ALPHA_MIN   <=  alpha
                            &&  alpha       <=  ALPHA_MAX;
    }while(
                good_input
            &&  !value_is_correct
          );
 
    return  good_input;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_real  alpha           = 0;
    T_real  initial_speed   = 0;
 
    while(
                input_alpha             (alpha)
            &&  input_initial_speed     (initial_speed)  
         )
    {
        std::cout   <<  "Расстояние в метрах:\t\t\t\t"
                    <<  std::fixed
                    <<  std::setprecision(3)                    
                    <<  get_horis_dist
                            (
                                alpha,
                                initial_speed
                            )
                    
                    << std::endl                        
                    << std::endl                        
                    << std::endl                        
                    << std::endl;                        
    }
}
-=ЮрА=-
Заблокирован
Автор FAQ
24.01.2012, 16:51     Задача вычисляющая расстояние которое пролетает камень. #21

Не по теме:

Цитата Сообщение от Mr.X Посмотреть сообщение
выражение для L неверно. 2 * tg(a) нужно записать в числителе, а (1 + tg^2(a)) - в знаменателе (и v0 там должно быть в квадрате). Именно поэтому результаты у вас не совпадают с вышеприведенным
- может с двойкой накосил, делать выкладки в редакторе тяжкий неблагодарный труд...



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

Не по теме:

Mr.X, а где у тебя в коде выход по exit,суть была в этом, забыл наверное???

Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
24.01.2012, 16:59     Задача вычисляющая расстояние которое пролетает камень. #22
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не по теме:
Mr.X, а где у тебя в коде выход по exit,суть была в этом, забыл наверное???
Программа завершается как при наборе слова exit, так и любого другого, не являющегося действительным числом, так что условие выполнено, но пользоваться удобнее: для завершения достаточно просто любую букву ввести.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 18:11     Задача вычисляющая расстояние которое пролетает камень.
Еще ссылки по теме:
Задача со строками (вывести слово, которое содержит ровно три буквы "и") C++
C++ Задача на рекурсию. Найти кратчайшее расстояние между городами i и j даже если между ними нет прямой дороги
C++ В чем подводный камень?
C++ Игра в камень,ножницы бумага.Что можно улучшить\оптимизировать?
Функция вычисляющая N!! C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
24.01.2012, 18:11     Задача вычисляющая расстояние которое пролетает камень. #23
http://www.cyberforum.ru/cgi-bin/latex.cgi?x(t) = {v}_{0}*cos(\alpha)*t
http://www.cyberforum.ru/cgi-bin/latex.cgi?y(t) = {v}_{0}*sin(\alpha)*t - \frac{g*{t}^{2}}{2}
x(T) = L
http://www.cyberforum.ru/cgi-bin/latex.cgi?0 = y(t) = {v}_{0}*sin(\alpha)*\frac{L}{{v}_{0}*cos(\alpha)} - \frac{g*{L}^{2}}{2*{{v}_{0}*cos(\alpha)}^{2}}
Преобразовываем
http://www.cyberforum.ru/cgi-bin/latex.cgi?0 = y(T) = 2*L*tg(\alpha) - \frac{g*{L}^{2}*{(1 + tg(\alpha))}^{2}}{{{v}_{0}}^{2}}
Откуда L составит
http://www.cyberforum.ru/cgi-bin/latex.cgi?L=\frac{ 2*{{v}_{0}}^{2}*tg(\alpha)}{g*{(1 + tg(\alpha))}^{2}} = \frac{{{v}_{0}}^{2}*sin(2*\alpha)}{g}

Добавлено через 1 минуту
Цитата Сообщение от Mr.X Посмотреть сообщение
Программа завершается как при наборе слова exit, так и любого другого, не являющегося действительным числом, так что условие выполнено, но пользоваться удобнее: для завершения достаточно просто любую букву ввести.
- тогда изучи внимательно задание
Цитата Сообщение от lFreeManl Посмотреть сообщение
пока пользователь не введет слово exit
, а также посмотри коды эдак с поста 13-го...

Добавлено через 27 минут
Ниже код который и "понимает" некорректный ввод и выходит только по exit
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
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
using namespace std;
 
bool getParam(double &param, string input)
{
    bool bCorrect = true;
    stringstream ss;
    ss.str(input);
    if(!(ss>>param))
        bCorrect = false;
    ss.clear();
    return bCorrect;
}
 
int main()
{
    string input;
    bool bRepeate = true;
    double v0, angle, L;
    double g = 9.81;
    double deg = asin(1.0)/90.0;//êîºôôèöèåГ*ГІ ïåðåâîäГ* ГЈГ°Г*äóñîâ Гў Г°Г*äèГ*Г*Г»
    while(bRepeate)
    {
        cout<<"Enter v0 : ";
        getline(cin, input);
        cin.ignore();
        if(strcmp(input.c_str(),"exit") == 0)
            bRepeate = false;
        else
        if(!getParam(v0, input))
            cout<<"Input error\n";
        else
        {
            cout<<"Enter angle(int degrees) : ";
            getline(cin, input);
            cin.ignore();
            if(strcmp(input.c_str(),"exit") == 0)
                bRepeate = false;
            else
            if(!getParam(angle, input))
                cout<<"Input error\n";
            else
            {
                L = v0*v0*sin(2*angle*deg)/g;
                cout<<"Length L : "<<L<<endl;
            }
        }
    }
    return 0;
}
Yandex
Объявления
24.01.2012, 18:11     Задача вычисляющая расстояние которое пролетает камень.
Ответ Создать тему
Опции темы

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