Иллюстрированный самоучитель по Basic, вводный курс

Случайные числа

В процессе изучения циклических алгоритмов уместно рассказать о генерации случайных чисел программным путем. При кажущейся простоте получить случайные числа не так легко. Попробуйте продиктовать своему другу 100 цифр. В идеале каждая из них должна бы повториться по теории вероятности около 10 раз, но у каждого человека встречаются какие-то пристрастия к тем или иным цифрам и в ряду из сотни цифр не будет абсолютной случайности. Получить на компьютере случайные числа тоже было нелегко, но в конце концов это удалось.

В качестве основы для создания какой-либо последовательности случайных чисел служат показания встроенного в компьютер таймера. А поскольку они в каждый момент времени различны, то мы и получаем великое множество практически неповторяющихся случайных чисел в заданном диапазоне.

Случайные числа нужны прежде всего в компьютерных играх, чтобы обеспечить непредсказуемость игры для человека. Кроме того, они используются в учебных задачах и моделировании различных математических, физических и других процессов на компьютере.

Итак, новый оператор rnd.

Чтобы получать случайные числа, вы прежде всего должны инициировать процесс генерации последовательности случайных чисел компьютером при помощи оператора randomize timer. Он указывается в программе только один раз и сообщает компьютеру, что надо создавать случайные числа, беря за основу показания таймера.

Затем, чтобы получить из этой последовательности какое-либо значение, мы должны использовать оператор rnd(n), который выдает случайное число в диапазоне от 0 до 1. Минимальное полученное число будет 0.0000001, а максимальное 0.9999999. В качестве N может служить любое целое или действительное число. Этот параметр также влияет на выбор компьютером случайных чисел. Например, программа:

RANDOMIZE TIMER X=RND(1)? X

Может вывести на экран число 0.367423, а может 0.0034289, а может 0.8912314. Каждый раз при запуске программы мы будем видеть новое значение.

Но часто встает проблема получения случайных чисел в заданном диапазоне. Как это сделать, мы рассмотрим на примерах.

Моделирование бросания монеты

Нам необходимо при каждом запуске программы случайным образом получать либо число 0 ("решка"), либо 1 ("орел"). Если мы будем просто брать целую часть от полученного при помощи rnd(N) случайного числа, то всегда будем получать 0.

Попробуем умножить rnd(N) на 2. В результате имеем числа от 0.0000002 до 1.9999998. Если мы теперь будем брать целую часть, то как раз и получим 0 или 1. Программа выглядит следующим образом:

CLS
RANDOMIZE TIMER
X=INT(RND(1)*2)
IF X=0 THEN? "У вас выпала решка" ELSE? "У вас выпал орел"

Моделирование бросания игрального кубика

Казалось бы надо пойти по уже проторенному пути первого примера и, раз нам надо получить цифры от 1 до 6, просто умножить rnd(N) на 6. Но, если разобраться, то обнаружится, что при этом мы будем получать числа в диапазоне от 0.0000006 до 5.9999994. Взятая целая часть даст нам числа от 0 до 5. На 6 никак не выходим. Хорошо, умножим на rnd(N) 7. Тогда получим числа от 0.0000007 до 6.9999993. Теперь получается 6, но нам ведь совсем не нужен 0. Что же делать? Очень просто – умножаем на 6 и прибавляем 1!

CLS
RANDOMIZE TIMER
X=INT(RND(1)*6)+1
? X

Так как в дальнейшем нам придется часто сталкиваться с заданиями, требующими использование случайных чисел, то необходимо потренироваться.

Напишите операторы для получения случайных целых чисел в интервалах.

171. От 1 до 10.

172. От -5 до +5.

173. От 10 до 20.

174. От 50 до 100.

175. От -35 до 65.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.