Случайные числа
Случайное число - это число, величина которого не может быть заранее известна. Классический пример - число очков, выпадающих при бросании игрального кубика.
В Quick Basic имеется функция RND, которая возвращает случайное значение из интервала (0, 1). Познакомимся с ней поближе. Составим программу вывода первых 5 случайных чисел на экран.
Программа |
Результат |
'Получение случайных чисел FOR i = 1 TO 5 x = RND PRINT x NEXT i |
.7055475 .533424 .5795186 .301948 .7747401 |
Если выполнить эту программу несколько раз, то мы с удивлением обнаружим, что на экран выдается одна и та же последовательность “случайных” чисел! Это происходит потому, что на самом деле каждое следующее случайное число получается из предыдущего по хитрой формуле, которая имитирует отсутствие закономерности в последовательности чисел. А поскольку первое число последовательности одно и то же, то повторяться будут и остальные числа.
Чтобы получать разные последовательности нужно при каждом запуске брать новую “затравку”. Для изменения “затравки” используем команду RANDOMIZE TIMER.
RANDOMIZE получает от функции TIMER значение системного времени и формирует “затравку” для RND. При следующем запуске программы функция TIMER вернет другое значение, и получится другая последовательность чисел.
Задача. Получить случайное целое число x в пределах от 1 до N
Решение. Умножим неравенство 0 < RND < 1 на N > 0. При умножении на положительное число знак неравенства сохраняется, поэтому 0 < N*RND < N. Чтобы получить целую часть результата воспользуемся функцией INT . Но INT(N*RND) изменяется в пределах от 0 до N-1. Осталось только прибавить единицу, чтобы получить окончательную формулу:
x = INT(N*RND) + 1
Задача. “Зажечь” на экране (в текстовом режиме) 100 звездочек.
Решение. Для каждой звездочки выберем для вывода случайным образом номера строки и позиции. Учитывая, что строк на текстовом экране 25, а позиций 80, получим программу
RANDOMIZE TIMER FOR i = 1 TO 100 nstr = INT(25*RND) + 1 npos = INT(80*RND) + 1 LOCATE nstr, npos: PRINT “*”; NEXT i |
Точка с запятой после оператора PRINT нужна, чтобы отменить перевод строки после вывода звездочки, иначе при выводе в последнюю строку экрана вся картинка сместится вверх.
Задание. Изменить программу так, чтобы она выводила на экран в графическом режиме 1000 точек случайного цвета. Замените точки окружностями или прямоугольниками.