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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
Soft
4 / 4 / 1
Регистрация: 20.09.2010
Сообщений: 102
#1

Время, через которое встретятся два тела - C++

29.09.2010, 21:51. Просмотров 2889. Ответов 4
Метки нет (Все метки)

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

Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу - C++
11. Определить время, через которое встретятся два тела, равноускорен¬но движущиеся навстречу друг другу, если известны их начальные...

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

Требуется по начальному расположению деталей на первом конвейере определить время, через которое все детали будут изготовлены - C++
Совсем не могу разобраться в программе помогите пожалуйста. Имеются три конвейера. Конвейеры работают независимо друг от друга....

Вычислить время падения тела с высоты H с начальной скоростью V0 - C++
Вычислить время падения тела с высоты H с начальной скоростью V0. Пытался решить, но ничего не вышло, помогите пожалуйста! //...

Определить время, за которое сортируется массив - C++
Подскажите как узнать время за которое отсортировался массив (mas) Внизу программы где используется InsertSort и массив уходит на...

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

4
Евгений М.
1037 / 978 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
30.09.2010, 06:36 #2

Не по теме:

По-моему эту тему нужно перенести в форум "Математика" или "Физика".



Пишу что пришло в голову.

Пусть t - время, когда тела встретятся.
Пусть первый прошел путь x. Тогда второй прошел S-x, где S - начальное расстояние.
В этот момент времени скорость первого был равен http://www.cyberforum.ru/cgi-bin/latex.cgi?a_1 t + V_{01}, второго http://www.cyberforum.ru/cgi-bin/latex.cgi?a_2 t + V_{02}, где http://www.cyberforum.ru/cgi-bin/latex.cgi?V_{01}; V_{02} - соответствующие начальные скорости.
Тогда справедливы соотношения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{x}{t}=a_1 t + V_{01} \\ \frac{S-x}{t}=a_2 t + V_{02}
Первое выражение подставим во второе получим:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{S}{t}=(a_1 + a_2) t + V_{01} + V_{02}
http://www.cyberforum.ru/cgi-bin/latex.cgi?(a_1 + a_2) t^2 + (V_{01} + V_{02}) t - S = 0
Получили квадратное уравнение. И почему-то в нем будут два решения.
0
CyBOSSeR
Эксперт С++
2306 / 1676 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.09.2010, 11:39 #3
Soft, при чем тут раздел C/C++ для начинающих?
0
Johnny_D
30.09.2010, 11:47
  #4

Не по теме:

Это была только вершина айсберга

0
Mr.X
Эксперт С++
3052 / 1697 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
30.09.2010, 14:07 #5
Цитата Сообщение от Евгений М. Посмотреть сообщение

Не по теме:

По-моему эту тему нужно перенести в форум "Математика" или "Физика".



Пишу что пришло в голову.

Пусть t - время, когда тела встретятся.
Пусть первый прошел путь x. Тогда второй прошел S-x, где S - начальное расстояние.
В этот момент времени скорость первого был равен http://www.cyberforum.ru/cgi-bin/latex.cgi?a_1 t + V_{01}, второго http://www.cyberforum.ru/cgi-bin/latex.cgi?a_2 t + V_{02}, где http://www.cyberforum.ru/cgi-bin/latex.cgi?V_{01}; V_{02} - соответствующие начальные скорости.
Тогда справедливы соотношения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{x}{t}=a_1 t + V_{01} \\ \frac{S-x}{t}=a_2 t + V_{02}
Первое выражение подставим во второе получим:
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{S}{t}=(a_1 + a_2) t + V_{01} + V_{02}
http://www.cyberforum.ru/cgi-bin/latex.cgi?(a_1 + a_2) t^2 + (V_{01} + V_{02}) t - S = 0
Получили квадратное уравнение. И почему-то в нем будут два решения.
Что же это вы, батенька, интегрирование заменяете простым умножением? Ну а второй корень отрицательный. Это означает, что если ускорения ненулевые, и телам суждено встретиться, то они уже встречались раньше. Т.е. если тело движется равноускоренно, то оно движется туда, где уже когда-то двигалось равнозамедленно. Впрочем, если тела двигаются равнозамедленно, то они могут встретиться, остановиться, полететь назад, и снова встретиться.
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
130
131
132
133
134
135
136
////////////////////////////////////////////////////////////////////////////////////
//Определить время, через которое встретятся два тела, равноускоренно 
//движущиеся навстречу друг другу, если известны их начальные скорости, 
//ускорения и начальное расстояние между ними. 
////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <cmath>
////////////////////////////////////////////////////////////////////////////////////
bool  successfully_get_t
    (
        double  s, 
        double  v1, 
        double  v2, 
        double  a1, 
        double  a2,
        double& t
    )
{
    //Из физики известно, что:
    //s = v0 * t + a * t * t / 2,
    //откуда при
    //v0 = v1 + v2
    //a = a1 + a2
    //s = (v1 + v2) * t + (a1 + a2) * t * t / 2
    //т.е. имеем квадратное уравнение относительно t:
    //(a1 + a2)/2 * sqr(t) + (v1 + v2) * t - s = 0,
    //т.е. 
    //  a * sqr(t) + b * t + c = 0,                           (1)
    //где:
    //a = (a1 + a2)/2,
    //b = v1 + v2,
    //c = -s.
    //Если в (1) a = 0, т.е. a1 + a2 = 0, то
    if(a1 + a2 == 0)
    {
        // b * t + c = 0, откуда
        // b * t  = -c                                        (2)
        //Если b = 0, т.е. v1 + v2 = 0, то:
        if(v1 + v2 == 0)
        {
            //0 = -c                                          (3)
            //Если c = 0, т.е. s = 0, то:
            if(s == 0)
            {
                //Тела уже встретились в начальный момент, следовательно
                t = 0;
                return true;
            }
            else
            {
                //При c != 0 уравнение (3) не  имеет решения, следовательно:
                return false;
            }
        }
        else
        {
            //При b != 0 из (2) получим:
            //t  = -c / b, т.е.            
            t = s /(v1 + v2); 
            return t >= 0;
        }
    }
    else
    {
        //Дискриминант равен: D = sqr(b) - 4*a*c = sqr(v1 + v2) - 4 * (a1 + a2)/2 * (-s)
        //= sqr(v1 + v2) + 2 * (a1 + a2) * s
        double D = (v1 + v2) * (v1 + v2) + 2 * (a1 + a2) * s;
        if(D < 0)
        {
            return false;
        }
        //тогда t1,t2 = (-b ± sqrt(D)) / 2a = (-v1 - v2 ± sqrt(D)) / (a1 + a2).        
        double t1 = (-v1 - v2 - pow(D, 0.5)) / (a1 + a2);
        double t2 = (-v1 - v2 + pow(D, 0.5)) / (a1 + a2);
        if(t1 < 0 && t2 < 0)
        {
            return false;
        }
        if(t1 >= 0 && t2 >= 0)
        {
            t = t1 < t2 ? t1 : t2;
            return true;               
        }
        t = t1 >= 0 ? t1 : t2;
        return true;               
    }
}
////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
 
    double s;
    do
    {
        std::cout << "Введите начальное расстояние между телами >= 0: ";
        std::cin >> s;    
    }while(s < 0);
 
    std::cout << "Введите скорости v1 и v2 и ускорения a1 и a2 тел."
              << std::endl
              << "Скорость и ускорение считается положительным, "
              << std::endl
              << "если оно направлено в сторону другого тела."
              << std::endl;
    double v1;
    std::cout << "v1 = ";
    std::cin >> v1;
 
    double v2;
    std::cout << "v2 = ";
    std::cin >> v2;
 
    double a1;
    std::cout << "a1 = ";
    std::cin >> a1;
 
    double a2;
    std::cout << "a2 = ";
    std::cin >> a2;
 
    double t = 0;
    if(successfully_get_t(s, v1, v2, a1, a2, t))
    {
        std::cout << std::endl
                  << "Тела встретятся чере время t = "
                  << t
                  << std::endl;    
    }
    else
    {
        std::cout << std::endl
                  << "Тела не встретятся никода!"
                  << std::endl;
    }
}
0
30.09.2010, 14:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2010, 14:07
Привет! Вот еще темы с ответами:

Подскажите, за которое время работает рекурсивная функции F - C++
Используется синтаксис c++ int F(int n) { if(n == 1) { return 1; } else { return...

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

Алгоритм(Найти максимальное совершенное число, которое в то же время меньше введенного N) - C++
Найти максимальное совершенное число, которое в то же время меньше введенного N Справка: Число называется совершенным, если оно...

Определить наименьшее время, которое должно пройти до того момента, когда часовая и минутная стрелки совпадут - C++
1) Даны целые числа M и N (0&lt;M&lt;=12, 0&lt;=N&lt;=60), указывающие момент времени: «M часов, N минут». Определить наименьшее время (число полных...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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