Компьютерное моделирование. Нет вывода
Всем привет, возникла проблема с заданием по компьютерному моделированию. Решение вроде правильное, но вывода нет ни при каких аргументах. В чём может быть проблема? Я в физике вообще никак, поэтому и прошу помощи.
Задание: Глубинная бомба, установленная на взрыв на заданной глубине, сбрасывается со стоящего неподвижно противолодочного корабля. Исследовать связь между временем достижения заданной глубины и формой корпуса (сферической, полусферической, каплевидной и т.д.).
Код:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const double g = 9.8; //Ускорение свободного падения, м/с^2
//Функция для дифференциальное уравнение
double diffEquation(double v, double k, double m){
return g - (k / m) * v;
}
int main(){
//Начальные условия
double v0 = 0.0; //Начальная скорость, м/с
double depth = 50.0; //Заданная глубина, м
double dt = 0.1; //Шаг по времени, с
double k_sphere = 0.1; //Коэффициент сопротивления для сферической формы
double k_other = 0.05; //Коэффициент сопротивления для других форм
//Ввод
cout << "Введите начальную скорость (v0, м/с): "; cin >> v0;
cout << "Введите глубину (depth, м): "; cin >> depth;
cout << "Введите время шага (dt, с): "; cin >> dt;
cout << "Введите коэффициент сопротивления для сферической формы (k_sphere): "; cin >> k_sphere;
cout << "Введите коэффициент сопротивления для другой формы (k_other): "; cin >> k_other;
//Параметры для численного метода Эйлера
double t = 0.0; //Время, с
double v = v0; //Текущая скорость, м/с
//Цикл численного решения
while (t < 100.0){ //Произвольный предел времени (можно уточнить)
//Выбор коэффициента сопротивления в зависимости от формы корпуса
double k = (v < 0) ? k_sphere : k_other;
string type = (k == k_sphere) ? "Cфера" : "Другая";
//Вычисление новой скорости с использованием метода Эйлера
v += dt * diffEquation(v, k, 1.0);
//Обновление времени
t += dt;
//Проверка достижения заданной глубины
if (v < 0 && -v * t >= depth){
cout << "Время достижения глубины " << depth << " м заняло " << t << " с." << " для формы корпуса:" << type << endl;
break;
}
}
return 0;
}