Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Управление динамикомМодуль crt также содержит процедуры, обеспечивающие управление динамиком. 1. Процедура Sound (f:word) - генерирует звук указанной частоты в Гц. Для справки, основной гамме соответствуют следующие частоты: нота «до» основной октавы - 330 Гц, далее - 349 Гц, 370 Гц, 392 Гц, 415 Гц, 440 Гц, 466 Гц, 494 Гц, 523 Гц, 554 Гц, 588 Гц, 622 Гц и, наконец, нота «до» следующей октавы - 660 Гц. Частоты нот других октав кратны частотам основной. 2. Процедура NoSound - выключает динамик. 3. Процедура Delaу (t:word) - обеспечивает задержку на заданный интервал времени, мс. Поскольку к настоящему моменту времени быстродействие компьютеров существенно возросло и изменились некоторые принципы их построения, процедура Delay не всегда обеспечивает корректную задержку, как видно из последующей программы. В этих случаях для организации задержки целесообразно использовать процедуру, которая читает реальное время. 4. Процедура GetTime (VarHour, Minute, Second, Sec100: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 i:byte; Begin for i:=1 to 13 do begin Sound(f[i]); for j:=1 to 5000 do Delay(1000); {задержка?!} NoSound; end; End.
Чтобы не подбирать время задержки для конкретного компьютера, построим свою процедуру обеспечения требуемой задержки, использующую процедуру GetTime: Program ex; Uses Crt, Dos; Procedure NewDelay(dTime:word); Var key:boolean; Hour, Min, Sec, Sec100, MyHour, MyMin, MySec, MySec100: Word; Begin GetTime(Hour, Min, Sec, Sec100); {узнаем текущее время} {определяем время завершения задержки} MySec100:=Sec100+dTime; MySec:=Sec+MySecl00 div 100; MySec100:=MySec100 mod 100; MyMin:=Min+MySec div 60; MySec:=MySec mod 60; MyHour:=Hour+MyMin div 60; MyMin:=MyMin mod 60; key:=false; while not key do {цикл задержки} Begin GetTime(Hour, Min, Sec, Sec100); {узнаем текущее время} {проверяем, наступил ли заданный момент} if (Ноиr>МуНоиr) or ((Ноиr=МуНоиr) and ((Min>MyMin) or ((Min=MyMin) and ((Sec>MySec) or ((Sec=MySec) and ((Sec100>=MySec100))))))) 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 i:byte; j:integer; {описываем массив окон пунктов меню} Const menu:array[1..4] of win= ((x1:5;y1:4;x2:15;y2:4;text: 'new '), (x1:5;y1:5;x2:15;y2:5;text: 'open'), (x1:5;y1:6;x2:15;y2:6;text: save'), (x1:5;y1: 7;x2:15;y2:7;text: 'exit')); {процедура рисования пункта меню} Procedure DrawWin(w:win;attr:byte); Begin with w do begin TextAttr:=attr; {устанавливаем атрибут окна пункта} Window(xl,у1,х2,у2); {устанавливаем окно пункта} Clrscr; {высвечиваем окно пункта} GotoXY(2,1); {устанавливаем курсор} Write(text); {выводим название пункта} end; End; {процедура рисования меню с выделенным пунктом npos} Procedure DrawMenu(npos: integer); Begin Clrscr; for i:=1 to 4 do if i=npos then DrawWin(menu[i],94) {выводим выделенный пункт} else DrawWin (menu[i], 30); {выводим невыделенный пункт} End; {основная программа} Begin npos:=1; {выделенный пункт меню} DrawMenu(npos); {выводим меню} repeat ch1:=ReadKey; if ch1=#0 then ch2:=ReadKey; case ch1 of #0: case ch2 of #72: begin {стрелка вверх} if npos>1 then {если не верхний пункт} begin DrawWin(menu[npos],30); {убираем выделение текущего пункта меню} npos:=npos-1; {переходим к предыдущему пункту} DrawWin(menu[npos],94); {выделяем новый пункт} end; end; Begin for i:=l to 13 do begin Sound(f[i]): NewDelay(50); NoSound; end; End.
|