Random и Randomize

Функция Random и Процедура Randomize


Что такое функция Random() и процедура Randomize в языке Pascal. Как это работает?

Randomize — это процедура которая используется в Паскаль для включения генератора случайных чисел. 

Функция Random определяет диапазон случайных чисел. Процедура Randomize и функция Random очень часто используются для демонстрации работы массивов в Паскаль.

Т.е. функция random возвращает нам число.

Пример :

1

2

3

var a : integer;

---------------

a := random(10);

Тут у нас переменная a может равняться числам от 0 до 9, не 10!!!!

Если мы хотим вывести числа от 0 до 1, то мы пишем следующее :

1

2

3

var a : integer;

---------------

a := random;

Т.е. random без всего.

Бывают случаи когда хочется иметь промежуток(диапазон) чисел. Допустим от -23 до 5, как его задать ?

Для начала мы складываем 23 и 5 без учета знаков и прибавляем 1(всегда) , у нас будет 29. Теперь пишем

1

2

3

var a : integer;

---------------

a := random(29);

Но это вернет нам числа от 0 до 28, теперь просто надо вычесть 23, не учитывая знаков. Так для промежутка c отрицательными числами.

С двумя положительными числами всё наоборот, сначала вычитаем из второго первое и прибавляем 1, мы получаем число, затем к нему прибавляем первое число :

1

2

3

5 до 29 = 29 - 5 + 1 = random(25) + 5

 

-1 до 13 = 13 + 1 + 1 = random(15) - 1


Так же есть формула для всех случаев:

x := random(max-min+1)+min; // тут уже все знаки   учитываются

Т.е. если нам нужен диапазон отрицательных чисел, например от -5 до -10, то мы пишем:

               // -5 это максимальное значение, потому что оно больше -10, а -10 это минимальное

               random(-5-(-10)+1)+(-10) // все знаки учитываются

В основном random и randomize в pascal используются вместе. Если использовать random отдельно, то у нас будут случайные числа постоянно одинаковы.

Допустим у нас есть код :

1

2

3

4

5

6

var a : integer;

begin

   a := random(10);

   writeln(a);

   readln;

end;

И при запуске программы у нас выведется допустим 3. И если мы запустим заново, то у нас снова выведется 3 и так при каждом запуске.

Для этого и используется randomize, чтобы числа не повторялись :

1

2

3

4

5

6

7

var a : integer;

begin

   randomize; // пишем до использование random()

   a := random(10);

   writeln(a);

   readln;

end;


Если мы это напишем, то у нас функция random каждый раз при запуске программы будет выдавать разные числа.

Другой пример

  1. program massiv4;
  2. uses crt;
  3. var a:integer;
  4. begin
  5. clrscr;
  6. randomize;
  7. repeat
  8. a:=random(1000);
  9. writeln(a);
  10. until a=256;
  11. readln
  12. end.

Строка №8 Присваиваем переменной «a» случайные числа в диапазоне от 0 до 999 (т.е. от 0 до 1000, но, не включая число 1000) с помощью функции Random. Т.е. запись (1000) означает, что все сгенерированные числа будут не меньше 0 и не больше 999. 

Предположим, что нам необходимо записать другой диапазон чисел, например от -1000 до 1000. В этом случае строка №8 будет иметь вид: a:= -1000 random(2001). Т.е. сначала записываем минимальное число диапазона (-1000), а в функции Random записываем сумму модуля минимального и максимального числа и прибавляем к ней 1. |-1000|+|1000|+1=2001. Таким образом, переменной «a» будут присвоены случайные числа в диапазоне от -1000 до 1000.

Эта программа в цикле будет выводить числа на экран от 1 до 999 пока не оно не станет равно 256:

program massiv4;

uses crt;

var a:integer;

begin

clrscr;

randomize;

repeat

a:=random(1000);

writeln(a);

until a=256;

readln

end.