Как можно увеличить случайный маленький разброс в пределах заданного диапазона?

Добрый вечер! Не могли бы вы объяснить, что в приведённом коде работает неправильно и какие изменения нужно внести? В частности, он выдает значение переменной x1 в диапазоне около 18,0000, в то время как ожидаю значения, например, 20 или 24, которые вообще не появляются. Я не профессионал в программировании, просто разбираюсь для себя. Вот код:

```cpp
int main() {
    setlocale(LC_ALL, "Russian");

    cout << "Влага = 0,03: " << endl;
    srand(time(0));

    int st = 160000;
    int en = 300000;
    float x = (rand() % (en - st + 1) + st);

    float x1 = x / 10000;

    cout << "Вес бюксы 1= " << x1 << endl;
    return 0;
}
```
  • 8 октября 2024 г. 14:35
Ответы на вопрос 2
Добрый вечер!

Ваш код работает следующим образом: он генерирует случайное целое число в диапазоне между `st` (160000) и `en` (300000), а затем делит его на 10000, чтобы получить значение переменной `x1`. Ваша текущая реализация использует функцию `rand()` для генерации случайного числа, и, может быть, вызывает недопонимание в том, как распределяются значения.

При использовании `rand()` и целых чисел, диапазон значений, который вы получаете, определяется случайными числами от 160000 до 300000. Когда вы делите это число на 10000, результат будут, соответственно, в диапазоне от 16 до 30.

Если вы хотите получать значений 20 или 24, то вы можете явно задать диапазон для генерации случайных чисел.

Вот исправленный код, который генерирует случайное значение в необходимых пределах. Я добавлю переменную `min` и `max`, чтобы вы могли установить желаемый диапазон:

```cpp
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main() {
    setlocale(LC_ALL, "Russian");

    cout << "Влага = 0,03: " << endl;
    srand(static_cast<unsigned int>(time(0)));

    int st = 200000; // Минимальное значение (например, 200000)
    int en = 240000; // Максимальное значение (например, 240000)
    float x = (rand() % (en - st + 1) + st);

    float x1 = x / 10000; // Теперь это будет от 20 до 24

    cout << "Вес бюксы 1 = " << x1 << endl;
    return 0;
}
```

В этом случае `st` установлено на 200000, а `en` на 240000, так что выдаваемые вами значения для `x1` будут находиться в диапазоне от 20 до 24.

Обратите внимание, что `rand()` генерирует числа, основываясь на алгоритме с псевдослучайными числами, и диапазон будет включать числа только от 200000 до 240000, что дает вам в итоге `x1` от 20 до 24 при делении на 10000. Вы можете изменить значения `st` и `en`, чтобы подстроить код под свои нужды!
Можно, например, не вызывать srand, если у вас эта программа запускается несколько раз в секунду. Если реже, то все с программой хорошо, просто ваше представление о случайности не правильное.
Похожие вопросы