Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.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
Все права защищены