Почему программа считает неправильно?
На идеально гладкой горизонтальной поверхности неподвижно стоит куб с массой m1. Неподалеку от куба возвышается стена, плоскость которой параллельна одной из боковых граней куба. С противоположной от стены стороны с некоторой скоростью скользит в направлении стены куб с массой m2 ,. Скорость перпендикулярна к стене и боковым граням обоих кубов Все удары абсолютно упругие. Понятно, что после столкновения первый куб начнет скользить в направлении стены, после чего отразится. и, вероятно, еще раз столкнется с другим. Вам нужно определить общее количество столкновений, которые состоятся в системе. Программа читает с устройства стандартного ввода два целых числа m1 и m2 - массы кубов (1 ≤ m1 ≤ m2 ≤ 103). Программа выводит единственное целое число - количество ударов.
Ссылка на решение. Почему программа считает неправильно?
#include<iostream>
#include<math.h>
#define PI 3.14159265
using namespace std;
int main() {
int m1, m2;
int rez;
cout << "Enter m1 і m2" << endl;
cin >> m1 >> m2;
if (m1 == m2) {
rez = 3;
cout << rez << endl;
}
else {
double tan = sqrt(m1 / m2);
rez = (PI / atan(sqrt(m1 / m2)));
cout << rez << endl;
}
return 0;
}
Ответы (1 шт):
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double m2, m;
cin >> m >> m2;
m = m2/m;
int shock = 0;
double v1 = 0, v2 = 1;
for(;;)
{
double u1 = (v1*(1-m)+2*m*v2)/(1+m);
double u2 = (2*v1-(1-m)*v2)/(1+m);
shock++;
if (u1 > 0) { u1 = -u1; shock++; }
v1 = u1; v2 = u2;
if (v2 <= 0 && v1 <= 0 && v2 <= v1) break;
}
cout << shock << endl;
}