Глава 11
Случайные числа
Краткое содержание: RANDOIIIZE, RND.
В этой главе описывается функция RND и ключевое слово
RANDOMIZE. их не надо путать, хотя оба расположены на клавише
'Т'. Для RANDOMIZE допустимо сокращение RAND*
При обращении к функции RND, она возвращает случайное число в
интервале от 0 до 1 (может принимать значение 0, но никогда 1).
Попробуйте выполнить:
10 PRINT RND
20 GO ТО 10 вы увидите как меняется результат.
Фактически RND не абсолютно случайное число, а выбирается из
определенной последовательности длиной в 65536 чисел, поэтому
обычно говорят, что RND - псевдослучайное число.
Оля получения случайного числа в интервале отличном от 0..1
можно использовать выражения, например:
1.3 + 0.7 * RND даст интервал от 1.3 до 2.
Для получения случайных целых чисел используйте функцию INT
(округляет с отбрасыванием дробной части). Например:
1 + I NT (RND ♦ 6) будет давать числа 1, 2, 3, 4, 5, 6.
Пусть имеется программа:
10 REM DICE TNRCWING PROGRAM (ВЫБРАСЫВАНИЕ КОСТИ)
20 CLS
30 FOR NB1 TO 2
40 PRINT 1 ♦ INT (RND*6);
SO NEXT N
60 INPUT AS: GO TO 20 нажимая ENTER, вы каждый раз будете
получать номер выпавший на кости.
Утверждение RANDOMIZE используется для установления начала
последовательности случайных чисел для функции RND. Как можно
увидеть из программы:
10 RANDOMIZE 1
20 FOR N«1 ТО 5: PRINT RND, : NEXT N
30 PRINT: GO TO 10
После каждого выполнения RANDOMIZE 1 случайная последователь-
ность будет начинаться с числа 0.0022735596. В утверждении
RANDOMIZE вы можете использовать любые числа в интервале от 1 до
65535. Нельзя использовать RANDOMIZE без числа, а также RANDOMIZE
0. Например, имеется программа:
10 RANDOMIZE
20 PRINT RND: GO TO 10
в каждой итерации будет печататься не случайное число. Для улуч-
шения случайности распределения можно заменить GO ТО 10 на GO ТО
20.
В дополнении, большинство версий бейсика используют RND и
RANDOMIZE для генерации случайных чисел, но это ие единственное
их применение.
Ниже приводится текст программы, моделирующей выбрасывание мо-
неты и подсчета числа выпадений 'орла' и 'решки'. (перевод имен
программы: HEADS-орлы, TAILS-решкн, COIN-монета)
10 LET HEADS*0: LET TAILS-0
20 LET COIN"INT (RND*2)
30 IF COIN-O THEN LET HEADS*HEvADS+1
40 IF COIN*1 THEN LET ТАILS*TAILS+1
50 PRINT HEADS; ', ': TAILS
60 IF TAILSO0 THEN PRINT HEADS/TAILS
70 PRINT: GO TO 20
Если программа выполняется достаточно долго, то отношение 'ор-
лов' к 'решкам' приблизительно равно 1.
Г А а в а 12