<<
>>

Управление динамиком

Модуль crt также содержит процедуры, обеспечивающие управление динамиком.

1. Процедура Sound (f:word) - генерирует звук указанной частоты в Гц. Для справки, основной гамме соответствуют следующие частоты: нота «до» основной октавы - 330 Гц, далее - 349 Гц, 370 Гц, 392 Гц, 415 Гц, 440 Гц, 466 Гц, 494 Гц, 523 Гц, 554 Гц, 588 Гц, 622 Гц и, наконец, нота «до» следующей октавы - 660 Гц.

Частоты нот других октав кратны частотам основной.

2. Процедура NoSound - выключает динамик.

3. Процедура Delay (t:word) - обеспечивает задержку на заданный интервал времени, мс.

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

4. Процедура GetTime (VarHour, Minute, Second, SeclOO'.word) - возвращает текущее время суток.

Определена в модуле Dos.

Пример 8.3. Разработать программу проигрывания основной октавы.

Проигрывание гаммы осуществляется включением и выключением динамика с разными частотами.

Program ex;

Uses Crt;

Const f: array[1..13] of word = (330, 349, 370, 392, 415, 440,

466, 494, 523, 554, 588, 622, 660);

Var kbyte;

Begin for i:=l to 13 do begin

Sound(f[iJ);

for j:-l to 5000 do Delay(lOOO); {задержка ?!} NoSound;

end;

End.

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

Program ex;

Uses Crt, Dos;

Procedure NewDelay(dTime:word);

Var key:boolean;

Hour, Min, Sec, SeclOO, MyHour, MyMin, MySec, MySeclOO: Word; Begin

GetTime(Hour, Min, Sec, SeclOO); {узнаем текущее время} {определяем время завершения задержки}

Му Seel 00: =Secl 00+dTime; MySec:=Sec+MySeclOO div 100;

My Seel 00:=MySecl 00 mod 100;

MyMin: =Min +MySec div 60; MySec:=MySec mod 60;

My Ho ur: =Ho ur+MyMin div 60; MyMin: =MyMin mod 60; key:=false;

while not key do {цикл задержки} begin

GetTime(Hour, Min, Sec, SeclOO); {узнаем текущее время} {проверяем, наступил ли заданный момент} if (Hour>MyHour) or ((Hour=MyHour) and ((Min>MyMin) or ((Min=MyMin) and ((SeoMySec) or ((Sec=MySec) and ((SeclOO>=MySeclOO))))))) then key:=true;

end

End;

Const f: array[1..13] of word = (330, 349, 370, 392, 415, 440,

466, 494, 523, 554, 588, 622, 660);

Var kbyte; j.integer;

{описываем массив окон пунктов меню}

Const menu:array[1..4] of win=

((хl:5;yl: 4;х2:15;у2:4;text: ’new ),

(xl: 5 ;yl: 5 ;х2:15 ;у2:5 ;text: ’open ’),

(x 1:5;vl:6;x2:15;y2:6;text: ’save ’),

(xl:5;yl:7;x2:15;y2:7¡text: ’exit’));

{процедура рисования пункта меню}

Procedure Draw Win (w: win;attr:byte);

Begin with w do begin

TextAttr:=attr; {устанавливаем атрибут окна пункта}

Window (xl,у 1,х2,у2); {устанавливаем окно пункта}

Clrscr; {высвечиваем окно пункта}

GotoXY(2,l); {устанавливаем курсор}

Write(text); {выводим название пункта}

end;

End;

{процедура рисования меню с выделенным пунктом npos}

Procedure DrawMenu(npos:integer);

Begin

Clrscr;

for i:=l to 4 do

if i=npos then DrawWin(menu[i],94) {выводим выделенный пункт} else DrawWin(menu[i],30); {выводим невыделенный пункт} End;

{основная программа}

Begin

npos:=l; {выделенный пункт меню}

DrawMenu(npos); {выводим меню} repeat

chl:=ReadKey; if chl=#0 then ch2:-ReadKey;

case chi of #0: case ch2 of

#72: begin {стрелка вверх}

ifnpos>lthen {если не верхний пункт} begin

DrawWin(menu[npos],30); {убираем выделение текущего пункта меню}

npos:=npos-l; {переходим к предыдущему пункту} DrawWin(menu[nposJ,94); {выделяем новый пункт} end;

end;

Begin for i:=l to 13 do begin

Sound(f[i]);

NewDelay(50);

NoSound;

end;

8.3.

<< | >>
Источник: Иванова Г.С. Основы программирования. 2002

Еще по теме Управление динамиком:

  1. Статья 1040. Обращение взыскания на имущество, переданное в управление, по требованию кредитора установщика управления
  2. Символическая динамика городской среды
  3. Глава 7. Модели волновой динамики
  4. Глава 8. Волны социокультурной динамики
  5. Глава 12. Анализ динамики систем
  6. § 3. Право управления предприятием как особый вид абсолютных прав. Право полного и ограниченного управления (п. 1774-1776)
  7. УПРАВЛЕНИЕ ВРЕМЕНЕМ VERSUS УПРАВЛЕНИЕ СОБОЙ
  8. РАЗДЕЛ 2. Содержательные модели социальной динамики
  9. Глава 11. Современные теории структурной динамики
  10. Раздел 2. Содержательные модели социальной динамики
  11. ДИНАМИКА ГРУППОВАЯ
  12. 12.6. Системная динамика Форрестера
  13. Тема 7. Модели волновой динамики
  14. 7.2. Волны, экономической динамики
  15. Динамика организационных отношений.
  16. Результаты исследований в динамике
  17. Собственная динамика прогнозов
  18. Динамика организационных отношений
  19. Результаты исследований в динамике
  20. § 4. Динамика и разрешение юридического конфликта