C ++: проблема с вложенным циклом if, который не заканчивается должным образом - PullRequest
1 голос
/ 28 февраля 2012

StackOverflow. Я новичок в C ++, и у меня есть еще одна проблема с моим заданием. Я пытаюсь написать программу, которая вычисляет скорость, с которой объект падает с базовой высоты, и отображает эту информацию как высоту объекта в зависимости от времени (в секундах), в течение которого он падал. Вот код, который у меня есть:

#include <stdio.h>

int main() {

    int acceleration, altitude, time;
    double distance;

    acceleration = 32;
    time = 0;

    printf("What is the altitude you are dropping your object from?\n");
    scanf("%d", &altitude);

    printf("Time    Altitude\n");

    while (altitude > 0){
        distance = ((0.5 * acceleration) * (time * time));
        altitude = altitude - distance;
        printf("%d      %d\n", time, altitude);
        time++;
        if (altitude <= 0){
            altitude = 0;
        }
   }

    return 0;
}

Я знаю, что уравнение для расстояния немного нарушено, но сейчас меня больше беспокоит то, что программа не печатает высоту 0, когда объект падает на землю. Вместо этого он печатает -104, и поскольку отрицательное расстояние недостижимо, я бы хотел это исправить.

Итак, мой вопрос заключается в следующем: что не так с моим циклом while / вложенным if, который заставляет программу не выводить 0 для последней записи в таблице?

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Проблема, которая вызывает это, - ваш интервал выборки: вы идете с шагом в одну секунду, поэтому ваша программа рассчитывает падение до отрицательных высот.Вы должны немного изменить свой код:

while (altitude > 0){
    distance = ((0.5 * acceleration) * (time * time));
    if (altitude < distance) {
        break;
    }
    altitude = altitude - distance;
    printf("%d      %d\n", time, altitude);
    time++;

}

Это не будет печатать время, когда объект ударяется о землю.Вы должны сделать это вычисление после цикла, используя оставшуюся высоту, скорость (acceleration*time) и acceleration, и решая уравнение для оставшегося времени, получая долю, представляющую секунды.

1 голос
/ 28 февраля 2012

Измените высоту перед печатью.

while (altitude > 0){
    distance = ((0.5 * acceleration) * (time * time));
    altitude = altitude - distance;
    if (altitude <= 0){
        altitude = 0;
    }
    printf("%d      %d\n", time, altitude);
    time++;
}
0 голосов
/ 28 февраля 2012

Вы печатаете высоту до того, как она будет установлена ​​на 0. Поскольку ваша формула предполагает, что время происходит с интервалом в 1 секунду, то распечатывается высота над уровнем моря в это время. Таким образом, если вы уронили объект с 20 футов, то через 1 секунду он окажется на 4 футах, а после 2 на -60 футах - когда он упадет на землю, это фактически составит 1,25 секунды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...