Rand выводит один и то же порядок чисел - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день, не могли бы вы помочь, я уже спрашивал насчет рэндом, все окей, генерирует число, но почему при компиляции выходит один и тот же порядок чисел? (например,если в цикле выводить: 1, 5, 2, 43, 18, еще раз программу запускаю и выходят точно такие же числа)

Решение задачи: «Rand выводит один и то же порядок чисел»

textual
Листинг программы
static unsigned long next = 1;
 
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}
 
void mysrand(unsigned seed) {
    next = seed;
}

Объяснение кода листинга программы

Вот список элементов кода, который оформлен в виде нумерованного списка:

  1. static unsigned long next = 1;
    • Объявлена статическая переменная next типа unsigned long и инициализирована значением 1. Эта переменная используется в качестве текущего состояния генератора случайных чисел.
  2. int myrand(void) {
    • Определена функция myrand, которая возвращает случайное целое число.
  3. *next = next 1103515245 + 12345;**
    • Текущее состояние генератора случайных чисел обновляется путём умножения на константу 1103515245 и добавления 12345. Это называется смешиванием или перемешиванием состояния генератора.
  4. return((unsigned)(next/65536) % 32768);
    • Возвращается случайное целое число в диапазоне от 0 до 32767. Для этого значение next делится на 65536 (максимальное значение для 16-битного числа), и результат берется по модулю 32768.
  5. void mysrand(unsigned seed) {
    • Определена функция mysrand, которая устанавливает начальное значение генератора случайных чисел (seed).
  6. next = seed;
    • Текущее состояние генератора случайных чисел обновляется с использованием переданного в качестве аргумента значения seed. В этом коде используется простой генератор случайных чисел, основанный на алгоритме LCG (линейный конгруэнтный генератор). Он генерирует псевдослучайные числа в диапазоне от 0 до 32767. Этот диапазон может быть изменен, если потребуется, путем изменения делителя в выражении (next/65536) % 32768.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.8 из 5
Похожие ответы