Основы программирования на языке Паскаль

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

sign (F, “CON”);

Rewrite (F);

N1:=0; {готовим счетчик вывода}

ClrScr; {очищаем экран}

{запоминаем начальный момент:}

t:= Meml [$0040:$006C];

{ждем начало нового 55-миллисекундного интервала, чтобы исключить погрешность в определении времени:}

while Meml [$0040:$006C]=t do;

{цикл вывода за 5 интервалов}

while Meml [$0040:$006C]<t+6 do

begin

inc (N1);

Write (F, txt)

end;

Close (F);

{вывод с помощью быстрой процедуры прямого доступа к экрану}

AssignCRT (F);

Rewrite (F);

N2:=0;

ClrScr;

t:= Meml [$0040:$006C];

while Meml [$0040:$006]=t do;

while Meml [$0040:$006]<t+6 do

begin

inc (N2);

Write (F, txt)

end;

Close (F);

{печатаем результат}

ClrScr;

Writeln (N1, N2:10)

end.

Следует учесть, что вывод на экран обычным образом, без использования файловой переменной (например, оператором Write (txt)), также осуществляется с помощью непосредственного доступа к видеопамяти, поэтому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к видеопамяти регулируется глобальной логической переменной DirectVideo модуля CRT: если эта переменная имеет значение True, доступ разрешен, если False доступ к экрану осуществляется с помощью относительно медленных средств операционной системы MSDOS. По умолчанию переменная DirectVideo имеет значение True.

 

11.3. Программирование звукового генератора

 

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

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

Процедура Sound заставляет динамик звучать с нужной частотой. заголовок процедуры Procedure Sound (F: Word); здесь F выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик, и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.

Процедура NoSound выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.

Процедура Delay oбеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры: Procedure Delay (T: Word);

Здесь Т выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.

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

Uses CRT;

const

F: array [1..12] of Real =

(130.8, 138.6, 146.8, 155.6, 164.8, 174.6, 185.0, 196.0, 207.7,

220.0, 233.1, 246.9); {массив частот 1-й октавы}

Temp = 100; {темп исполнения}

var

k, n: integer;

begin

{восходящая гамма}

for k:=0 to 3 do

for n:=1 to 12 do

Begin

Sound (Round (F[n]*(1 shl k)));

Delay (Temp);

NoSound

end;

{нисходящая гамма}

for k:=3 downto 0 do

for n:=12 downto 1 do

begin

Sound (Round (F[n]*(1 shl k)));

Delay (Temp);

NoSound

end

end.

В следующей программе перемножается матрица на вектор, основу которой составляет ранее рассмотренные Program Prim 29 i Prim 29а. Здесь максимальные размеры матрицы 1010 элементов типа byte. Ввод информации производится в окне светло-бирюзового цвета, вывод результатов в окне малинового цвета, цвет букв желтый.

Программа в начале работы издает звуки частотой от 130 до 2130 Гц, затем при вводе величины a частотой 2000 Гц, b 1500 Гц длительностью n=100 мс. В конце работы программа издает звуки от 2130 до 130 Гц. Программа использует подпрограмму Wind, написанную на основе Prim 52.

Program Prim53; Uses CRT; var i,j,n,m,k,l:integer; a:array[1..50,1..70] of byte; b:array[1..10] of byte;

c:array[1..10] of longint;

cv:byte;

{$i C:\TURBO\ wind.pas}

BEGIN

Clrscr; {очистить экран }

cv:=11; {цвет 11, светло-бирюзовый}

wind(1,1,50,7); { открыть окно, обращения к процедуре}

Sound(330); { включить звук, частотой 330 гц } Delay(1000); { задержать на 1000 миллисекунд } NoSound; { выключить звук }

writeln (ввести количество строк и столбцов);

GotoXY(2,3); l:=4; {l устанавливает курсор по y}

readln(n,m);

for i:=1 to n do

for j:=1 to m do

begin GotoXY(2,l);

writeln( введите a[,i,,,j,] элемент матрицы а );

GotoXY(34,l); { перевести курсор в конец текста:}

{ввести a[i,j] элемент матрицы}

ClrEol; { удалить конец строки до границы окна}

readln(a[i,j]); { ввести очередное а в конце текста }

end;

L:=L+1;{}

for j:=1 to m do

begin GotoXY(2,l);

writeln(ввести b[,j,] элемент вектора b);

GotoXY(33,l);

<