Случайное число - это число, величина которого не может быть заранее известна. Классический пример - число очков, выпадающих при бросании игрального кубика.
В 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 точек случайного цвета. Замените точки окружностями или прямоугольниками.
8. Музыкальные и звуковые возможности
Quick Basic использует известные музыкантам буквенные обозначения нот. Для повышения или понижения основной ноты на полтона используются знаки альтерации - диез (# или +) или бемоль (-), которые ставятся после ноты.
Длительность нот обозначаются числами: 1 - целая, 2 - половинная, 4 - четвертная, 8 - восьмая, 16 - шестнадцатая. Число может стоять после каждой ноты (c4, e-2, a8), либо, если длительность нескольких подряд идущих нот одинакова, указывается один раз после английской буквы L (L1, L2, L4 и т.д.). Аналогично указывается длительность пауз - p1, p2, p4 и т.д.
Октавы обозначаются английской буквой o с указанием номера от 0 до 6, причем первой октаве соответствует номер 3. Кроме непосредственного указания октавы, можно использовать символы > (переход на октаву вверх) и < (переход на октаву вниз).
Мелодия, взятая как и любая текстовая строка, в кавычки, исполняется оператором PLAY. Длинную мелодию лучше записать в нескольких операторах, но так, чтобы Quick Basic смог понять каждый их них.
Буквы в записи мелодии могут быть как строчными, так и прописными. Можно, например, использовать прописные буквы для установки длительностей, октав, режимов и т.д., а строчные - для самих нот.
Пример. Наберите и выполните следующую программу:
PLAY “O2 L8 ececfe d4 < ggg a16 b16 > cc c4”
Обратите внимание на запись длительностей нот. Указание L8 действует на все ноты, не имеющие “своей” длительности. С другой стороны, длительность, приписанная конкретной ноте, не распространяется на другие ноты.
Мелодия “Чижика” исполнялась в нормальном стиле с очень небольшими паузами между нотами. Если в начале мелодии поставить ML, то этих пауз не будет совсем. Такой стиль музыканты называют “легато” (legato). Противоположным является стиль “стаккато” (staccato) - отрывистое, с большими паузами между нотами исполнение мелодии. Этот стиль задается сочетанием MS. И, наконец, чтобы после ML или MS вернуться к нормальному стилю, следует поставить в нужное место MN.
Темп исполнения (не путайте с разной длительностью нот!) может изменяться в широких пределах. Самый медленный обозначается T32, а самый быстрый - T255. По умолчанию устанавливается темп T120 - 120 четвертей в минуту.
Задание . Измените стиль и темп исполнения написанной музыкальной фразы. Продолжите мелодию “Чижика”. Подберите мелодию какой-либо другой известной песни.
Напоследок упомянем о двух режимах исполнения мелодии. В режиме MF (устанавливается по умолчанию) программа ждет завершения оператора PLAY. В режиме MB программа продолжает выполняться на фоне музыки.
|