Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также

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

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

   В 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 программа продолжает выполняться на фоне музыки.

 


[ Назад | Оглавление | Далее ]









helloworld.ru © 2001-2021
Все права защищены