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

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

   В 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 точек случайного цвета. Замените точки окружностями или прямоугольниками.

 

Сайт создан в системе uCoz