Как это реализовать?(не понимаю структуры программы)
Две железнодорожные ветки пересекаются под прямым углом. Начало координат расположено в точке их пересечения, а оси совпадают с рельсами. Во избежание аварий на перекрестке дежурит диспетчер, но как часто бывает, он заснул на рабочем месте. Тем временем два поезда мчались в сторону перекрестка по разным веткам. Известны скорости поездов, их длины и начальные координаты «голов» поездов ,при этом начальные координаты положительные. Определите, произойдет ли катастрофа.
Технические условия: Программа читает с клавиатуры количество контрольных примеров Т (не более 10). Далее - Т групп по 8 действительных чисел: V1 – скорость первого поезда, V2 – скорость второго поезда, L1 – длина первого поезда, L2 – длина второго поезда, X1, Y1 – координаты «головы» первого поезда, X2, Y2 – координаты "головы" второго. Все числа не превышают 5000, вводятся в одной строке через пробелы. Программа выводит на экран для каждого теста 1, если произошла трагедия, 0, если все обошлось хорошо. Все числа выводятся в одну строку без пробелов между ними, а также в начале и конце строки. Если «голова» одного поезда чиркает «хвост» другого, то считать, что все отделались легким испугом, а потому вывести 0.
Пример:
Ввод
2 100.0 1.0 2.0 2.0 2.0 0.0 0.0 100.0 20.0 20.0 5.0 5.0 0.0 3.0 4.0 0.0
Вывод
01
Ответы (1 шт):
Как в том анекдоте... Легче написать и закрыть вопросы, чем объяснить, как работает простейшая арифметика. Ну что тут может быть непонятно?!!
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
pair<double,double> train(double v, double l, double x, double y)
{
if (fabs(x) <= 1e-5)
{
return make_pair(y/v,(y+l)/v);
}
else
{
return make_pair(x/v,(x+l)/v);
}
}
int crack(pair<double,double> t1, pair<double,double> t2)
{
return !(t1.second <= t2.first || t2.second <= t1.first);
}
int main()
{
int N;
cin >> N;
for(int i = 0; i < N; ++i)
{
double v1, v2, l1, l2, x1, y1, x2, y2;
cin >> v1 >> v2 >> l1 >> l2 >> x1 >> y1 >> x2 >> y2;
cout << crack(train(v1,l1,x1,y1),train(v2,l2,x2,y2));
}
}