Глиф Учебники

Случайные числа — random и randomize

Справочник · Pascal · 2 минуты чтения

Pascal
program Dice;
var
  i: integer;
begin
  randomize;
  for i := 1 to 5 do
    write(random(6) + 1, ' ');
  writeln;
end.

Программа «бросает кубик» пять раз и при каждом запуске печатает новые пять чисел от 1 до 6, например 4 1 6 6 2.

Число от a до b

Формула для целого числа от a до b включительно:

Pascal
x := a + random(b - a + 1);

Например, от −10 до 10: x := -10 + random(21) — всего 21 возможное значение. От 10 до 99 (двузначное): x := 10 + random(90).

Дробное число от a до b: x := a + random * (b - a).

В PascalABC.NET есть ещё функция Random(a, b) — сразу целое от a до b включительно. В Free Pascal её нет, там используйте формулу выше.

Зачем randomize

Компьютер не бросает кости: «случайные» числа считаются по формуле от начального значения. В Free Pascal без randomize это значение одно и то же, и программа при каждом запуске выдаёт одинаковые числа. randomize берёт начальное значение от текущего времени, и числа каждый раз новые. В PascalABC.NET генератор и без randomize при каждом запуске начинает по-новому, но вызов ничему не мешает — пишите его, чтобы программа работала одинаково везде.

Одинаковые числа при каждом запуске бывают и полезны — при поиске ошибки. Тогда randomize временно закомментируйте.

Не вызывайте randomize внутри цикла. Повторные вызовы почти в один и тот же момент могут задать генератору одно и то же начальное значение, и числа начнут повторяться.

Массив из случайных чисел

Pascal
program RandomArray;
var
  a: array[1..10] of integer;
  i: integer;
begin
  randomize;
  for i := 1 to 10 do
    a[i] := random(101) - 50;
  for i := 1 to 10 do
    write(a[i], ' ');
  writeln;
end.

Каждый элемент — от −50 до 50. Так удобно проверять программы с массивами: не нужно каждый раз набирать данные.

Подводные камни