В обучающих алгоритмических задачках довольно часто встречается необходимость генерации случайных целых чисел. Конечно, можно получать их от пользователя, но с заполнением массива случайными числами в количестве 100 штук могут возникнуть проблемы.
На помощь нам приходит функция стандартной библиотеки языка Си (не C++) rand() .
Она генерирует псевдослучайное целое число на интервале значений от 0 до RAND_MAX . Последнее является константой, которая варьируется в зависимости от реализации языка, но в большинстве случаев составляет 32767.
А что если нам нужны случайные числа от 0 до 9? Типичный выход из ситуации — использование операции деления по модулю.
Если нам нужны числа от 1 (а не от 0) до 9, то можно прибавить единичку…
Идея такая: генерируем случайное число от 0 до 8, и после прибавления 1 оно превращается в случайное число от 1 до 9.
И последнее, самое печальное.
К сожалению, функция rand() генерирует псевдослучайные числа, т.е. числа, которые кажутся случайными, но на самом деле являются последовательностью значений, вычисленных по хитрому алгоритму, в качестве параметра принимающему так называемое зерно (seed). Т.е. сгенерированные функцией rand() числа будут зависеть от значения, которое имеет зерно в момент ее вызова. А зерно всегда устанавливается компилятором в значение 1. Иными словами, последовательность чисел будет хоть и псевдослучайной, но всегда одинаковой.
# Введение в Python 3 | Урок 7 | Генератор случайных чисел random |
А это не то, что нам надо.
Исправить ситуацию помогает функция srand() .
void srand (unsigned int seed);
Она устанавливает зерно равным значению параметра, с которым была вызвана. И последовательность чисел тоже будет другая.
Но проблема осталась. Как сделать случайным зерно, ведь от него все зависит?
Типичный выходит из ситуации — использование функции time() .
time_t time (time_t* timer);
Она тоже досталась в наследство от языка Си и, будучи вызвана с нулевым указателем в качестве параметра, возвращает количество секунд, прошедших с 1 января 1970 года. Нет, это не шутка.
Теперь значение этой функции мы можем передать в функцию srand() (при этом выполняется неявное приведение типа), и у нас будет замечательное случайное зерно.
И числа будут замечательные и неповторяющиеся.
Для использования функций rand() и srand() нужно подключить заголовочный файл , а для использования time() — файл .
Вот полноценный пример.
Источник: cppstudy.wordpress.com
Написать программу которая генерирует последовательность из 10
19952811 10 лет назад
Светило науки — 3 ответа — 0 раз оказано помощи
PROGRAM ThreeSequences(INPUT, OUTPUT);
VAR
Number: ARRAY[1 .. 3, 1 .. 10] OF INTEGER;
ArithmeticAverage: ARRAY[1 .. 3] OF INTEGER;
I, J: INTEGER;
BEGIN
Randomize;
Как сгенерировать список случайных уникальных чисел. Python. Александр Килинкаров
FOR I := 1 TO 3
DO
FOR J := 1 TO 10
DO
Number[I][J] := Random(10) + 1;
FOR I := 1 TO 3
DO
BEGIN
WRITE(‘Sequences: ‘);
ArithmeticAverage[I] := 0;
FOR J := 1 TO 10
DO
BEGIN
WRITE(Number[I][J]:3);
ArithmeticAverage[I] := ArithmeticAverage[I] + Number[I][J];
END;
WRITELN;
ArithmeticAverage[I] := ArithmeticAverage[I] DIV J;
WRITELN(‘ArithmeticAverage: ‘, ArithmeticAverage[I]);
END;
END.
Источник: megashkola.com
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Java: генерировать случайные целые числа в диапазоне
Введение В этом руководстве мы рассмотрим, как сгенерировать случайные целые числа в определенном диапазоне в Java. Мы рассмотрим несколько подходов, включая базовые решения Java и сторонние решения: * Random.ints () * Random.nextInt () * Math.random () * SecureRandom.nextInt () * ThreadLocalRandom.nextInt () * SplittableRandom.ints () Примечание: для каждого подхода мы рассмотрим, как сгенерировать одно случайное целое число, а также как сгенерировать последовательность случайных целых чисел. Все эти методы
Время чтения: 6 мин.
Вступление
В этом руководстве мы рассмотрим, как сгенерировать случайные целые числа в определенном диапазоне в Java .