Если в коде есть запутанная формула, просто вводите больше имен переменных, пока значение не станет очевидным.До тех пор, пока вы не переназначаете разные значения одним и тем же переменным, это не вызовет путаницы в программе.
int calcit (double hite_meters, double angl_deg, double v_mph)
{
double const gravity = 9.8;
double v_ms = v_mph * (1609.344/3600);
double angl_rad = angl_deg * (M_PI/180);
double v_vertical = v_ms * sin( angl_rad );
double time_up = v_vertical / gravity; // [m/s] / [m/s^2] = [s]
double time_down_over_cliff = time_up;
// use quadratic formula t = ( -v - ( v^2 - 4gd )^1/2 ) / 2g:
double time_under_cliff = ( - v_vertical
- sqrt( ( v_vertical * v_vertical )
- ( 4 * - gravity * hite_meters ) ) // negative gravity = down
) / ( 2 * - gravity ); // ( [m/s] + ([m/s]^2 - [m/s^2]*[m])^1/2 ) / [m/s^2]
// = [m/s] / [m/s^2] = [s]
double time_total = time_up + time_down_over_cliff + time_under_cliff;
double v_horizontal = v_ms * cos( angl_rad );
double dist_horizontal = v_ms * time_total;
cout << time_total << " " << dist_horizontal <<endl;
}
Каждая строка кода создает новую, релевантную часть информации.При преобразовании в новый модуль я ввожу новую переменную с новым именем.Формулы, включающие более одной единицы, получают типы единиц, объясненные в комментарии.Это должно помочь выявить ошибки преобразования единиц измерения, которые в противном случае я не могу вам помочь.
Написание такого рода кода включает в себя больше набора текста, но время, сэкономленное на расчесывании головы и обращении за помощью, больше, чем восполняетэто.
Сама программа не менее эффективна.Что еще более важно, его можно легко изменить, чтобы он не превратился в неэффективный беспорядок после нескольких ревизий.