Почему моя формула не вычисляет значение в цикле WHILE? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь получить промежуточный результат для моего кода консоли.
Задача следующая:

В общей сложности A тоннvegs на складе.
В конце месяца 1 мы берем B тонн для продажи, в конце 2-го месяца - (1.1 * B) , вв конце месяца мы берем (1+ (M-1) / 10) * B тонн.У нас есть ограничение в 10 месяцев (мы не будем рассчитывать более 10 месяцев).
Начальные значения A и B вводятся пользователем.

Мой код:

float A,B; 
int M = 1; 
... /here user types stuff in/...

while (M<10)
    {
        B = (1 + (M - 1) / 10) * B; // goddamn formula that can't execute normally
        cout << "It's " << M << " month, we took " << B << " tonnes of vegs." << endl;
        M++;
    }

Что я набираю:
A = 500;B = 1

То, что я ожидаю, должно произойти:
Это 1 месяц, мы взяли 1 тонну овощей.
тихие вычисления: B = (1+ (1-1) / 10) * 1 = 1;М = 1 + 1 = 2
Это 2 месяца, мы взяли 1,1 тонны овощей.
тихие вычисления: B = (1+ (2-1) / 10) * 1 = 1,1;М = 2 + 1 = 3
Это 3 месяца, мы взяли 1,32 тонны овощей.
беззвучные вычисления: B = (1+ (3-1) / 10) * 1,1 = 1,32;M = 3 + 1 = 4
и так далее, пока мы не достигнем 10-го месяца.

Что я вижу вместо этого:
Это 1 месяц, мы взяли 1 тонну овощей
Это 2 месяца, мы взяли 1 тонну овощей
Это 3 месяца, мы взяли 1 тонну овощей
И так, поэтому месяцы рассчитываются, а формула из задачи - нет.

Какое бы значение БИ вместо этого всегда отображалось.

Что я делаю неправильно?

1 Ответ

0 голосов
/ 10 декабря 2018

M является int.Итак, (1 + (M - 1) / 10) тоже int.Это деление является целочисленным делением.Вы никогда не получите 1.1 из этого.Он будет усечен до 1. Каждый раз.

Используйте / 10.0 там, чтобы все это было с плавающей точкой.

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