ГЛАВА 11
СЛУЧАЙНЫЕ ЧИСЛА
Краткое содержание: RANDOMIZE, 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 + INT (RND * 6) будет давать числа 1,2,3, 4, 5,
6.
Пусть имеется программа:
10 REM *DICE THROWING PROGRAM* (выбрасывание кости)
20 CLS
30 FOR N-l TO 2
40 PRINT 1+INT(RND *6);" ";
50 NEXT N
60 INPUT A$: GO TO 20
Нажимая ENTER, Вы каждый раз будете получать номер, выпавший на
кости.
Утверждение RANDOMIZE используется для установления начала пос-
ледовательности случайных чисел для функции RND. Как можно увидеть из
программы:
10 RANDOMIZE 1
20 FOR N-l ТО 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.
Примечание: Большинство версий BASIC'a используют RND и RANDOMIZE
для генерации случайных чисел, но это не единственное их применение.
Ниже приводится текст программы, моделирующей выбрасывание мо-
неты и подсчета числа выпадений "орла" и "решки .
(перевод имен программы: HEADS - орлы, TAILS - решки, COIN - моне-
та)
10 LET HEADS-O: LET TAILS=0
20 LET COIN-INT (RND *2)
30 IF C0IN=0 THEN LET HEADS-HEADS+l
40 IF COIN-1 THEN LET TAILS-TAILS+l
50 PRINT HEADS;",";TAILS
60 IF TAILSO THEN PRINT HEADS/TAILS;
70 PRTNT : GO TO 20
Если программа выполняется достаточно долго, то отношение "орлов" к
"решкам" приблизительно равно 1.