Проблема с написанием кода для движения снаряда - PullRequest
1 голос
/ 24 марта 2020

Я пытаюсь написать этот код, который вычисляет конечную высоту и продолжительность полета для снаряда, в то время как пользователь должен предоставить значения для смещения, начальной скорости и угла запуска. Нет ошибок компиляции, но это скорее логическая ошибка, с которой я сталкиваюсь. Окончательное значение высоты полностью неверно, а также продолжительность. Кроме того, после того, как я ввожу угол запуска, он не сразу вычисляет высоту и время. Вместо этого мне нужно нажать клавишу «вниз», а затем «Ввод», чтобы рассчитать. Я вызываю компилятор [g cc -Wall -Werror -ansi -o task2.out task2. c -lm], за которым следует строка [./task2.out]

#include <stdio.h> /* access to scanf, printf functions */
#include <math.h> /* access to trignometric functions */
#define g 9.8 /* acceleration due to gravity constant */
int main(void){
    double v, theta, t, x, h2;
    /* v = initial velocity
    theta = launch angle
    t = time
    x = horizontal displacement
    h2 = final height
    */

    printf("Enter range of projectile>");
    scanf("%lf", &x); /* assigned x as a long float */

    printf("Enter velocity>");
    scanf("%lf", &v); /* assigned v as a long float */

    printf("Enter angle>");
    scanf("%lf", &theta); /* assigned theta as a long float */

    scanf("%lf", &t); /* assigned t as a long float */
    t = x/v*cos(theta); /* formula for time */

    scanf("%lf", &h2); /* assigned h2 as a long float */
    h2 = (t*v*sin(theta)) - (0.5*g*t*t); /* formula for height */

    printf("Projectile final height was %.2lf metres./n", h2); 
    printf("Projectile duration was %.2lf seconds", t );

    return 0;       
}

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Принимая во внимание несколько вещей (вакуум, плоская среда, большой радиус Земли, угол, заданный через 2 Пи для полного оборота, а не 360), ваши расчеты должны быть

t = x/(v*cos(theta));

, потому что вам нужно разделить на горизонтальная часть скорости, а не по скорости, а затем умножить на углы косинуса.

h2 = (t*v*sin(theta)) - (0.25*g*t*t);

Поскольку максимальная высота достигается после остановки длительности, а не после полной продолжительности.
Именно поэтому интеграл ускорения силы тяжести (0.5 * g * t * t) нужно только вычесть наполовину.

Проблема с необходимостью вводить больше, чем просто числа, уже рассмотрена в предыдущем ответе Джона: смотрите там.

1 голос
/ 24 марта 2020

It doesn't instantly calculate. Это потому, что вы пытаетесь прочитать дополнительный номер

scanf("%lf", &t); /* assigned t as a long float */

Удалите эту строку. Формула в следующей строке вычисляет время.

Та же ошибка для высоты,

scanf("%lf", &h2); /* assigned h2 as a long float */

Также удалите эту строку.

...