Генератор псевдослучайных чисел

Бывают ситуации, когда требуется, чтобы результат работы программы был случайным в определенных пределах. Для реализации такой возможности во многих языках программирования присутствуют встроенные функции, код которых выдает случайные числа. На самом деле числа не совсем случайные, а псевдослучайные. Дело в том, что искусственно реализовать случайность невозможно. Обычно берется некоторый коэффициент, и с его помощью вычисляется каждое последующее «случайное» число.

В языке программирования Паскаль для генерации псевдослучайных чисел в заданных диапазонах используется функция random. Перед ее использованием обычно выполняется процедура инициализации датчика случайных чисел - randomize; иначе программа всегда будет выдавать один и тот же результат. Randomize задает начальное значение последовательности, от которого вычисляются все последующие. При каждом запуске программы это значение будет разным, а значит и результат работы функции random будет различным.

Функция random генерирует случайное число в диапазоне от 0 (включительно) до единицы. Если в скобках указан аргумент, то от 0 до значения указанного в скобках (не включая само значение). Так выражение random (10), говорит о том, что будет получено любое число в диапазоне [0, 10). Если требуется получать значения в каком-либо другом диапазоне (не от нуля), то прибегают к математической хитрости. Например, чтобы получить случайное число от -100 до 100 достаточно записать такое выражение: random (200) – 100. В результате, сначала будет получено число из диапазона [0, 199], а затем из него будет вычтена сотня. И если случайное число было меньше 100, то результат выражения будет отрицательным.

В примере программы сначала с помощью процедуры randomize инициализируется датчик случайных чисел. Далее переменной n присваивается случайное значение в диапазоне [5, 12). Значение переменной n используется для определения количества итераций цикла for. В цикле for генерируются случайные числа в диапазоне [0, 50) и выводятся на экран.

var n, i, x: integer;
 
begin
    randomize;
 
    n := random (7) + 5;
 
    for i := 1 to n do begin
        x := random (100) - 50;
        write (x:5)
    end;
 
readln
end.

Задачи к данной теме

Комментарии

Случайное число

А как задать трехзначное случайное число, оканчивающееся на 0, и при этом случайное двухзначное чётное число? И вывести их на экран

рандомные числа

а если мы не знаем границы. например нужно написать программу где выводятся рандомные числа от A до B. как быть в этом случае?

А как исключить число из

А как исключить число из рандомности? Например, чтобы в диапазоне от [0,10] не могла выпасть цифра 5?

помогите)

Как сделать рандом -π до π?

random() * pi*2 - pi;

random() * pi*2 - pi;

*

Паскаль выдает ошибку на скобки
random*pi*2-pi будет верно?

У меня FreePascal. Работает

У меня FreePascal. Работает как со скобками, так и без скобок.

var 
    n: real;    
    i: byte;
begin
    randomize;
    for i:=1 to 100 do begin
        n := random() * pi * 2 - pi;
        write(n:6:2);
    end;
end.

Случ. числ

А второе случайное число не в диапазоне от -50 до + 50.

Случ. числ

[-50;50), не включая 50.

Случ. число

Именно так

Случ. число

а если нужно от 400 до 600 как это записать? спасибо.

random(200) + 400

random(200) + 400

Re:

X:=Random(201)+400.;

Re

А как написать если нужно рандомное число из определенного диапозона?

Рандом

Допустим, диапазон от 200 до 400, тогда операция random приобретет вид "random(200)+200", если от 0 до 200, то "random(200)", и т.д., если не ошибаюсь