const
txt= 'Text';
begin
{-----стандартный вывод в файл------}
Assign (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
inc (N1);
Write (F, txt)
end;
Close (F);
{вывод с помощью быстрой процедуры прямого доступа к экрану}
AssignCRT (F);
N2:=0;
ClrScr;
while Meml [$0040:$006]=t do;
while Meml [$0040:$006]<t+6 do
inc (N2);
{печатаем результат}
Writeln (N1, N2:10)
end.
Следует учесть, что вывод на экран обычным образом, без использования файловой переменной (например, оператором Write (txt)), также осуществляется с помощью непосредственного доступа к видеопамяти, поэтому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к видеопамяти регулируется глобальной логической переменной DirectVideo модуля CRT: если эта переменная имеет значение True, доступ разрешен, если False -- доступ к экрану осуществляется с помощью относительно медленных средств операционной системы MS--DOS. По умолчанию переменная DirectVideo имеет значение True.
11.3. Программирование звукового генератора
Звуковые возможности пк основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в пк динамик и заставляют его звучать.
В модуль CRT включены три процедуры, с помощью которых вы сможете запрограммировать произвольную последовательность звуков.
Процедура Sound заставляет динамик звучать с нужной частотой. заголовок процедуры Procedure Sound (F: Word); здесь F - выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик, и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.
Процедура NoSound выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.
Процедура Delay oбеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры: Procedure Delay (T: Word);
Здесь Т -- выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.
Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound--Delay--NoSound. следующая программа заставит пк воспроизвести простую музыкальную гамму. Используемый в ней массив F содержит частоты всех полутонов в первой октаве от «до» о «си». При переходе от одной октавы к соседней, частоты изменяются в два раза.
Uses CRT;
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;
{восходящая гамма}
for k:=0 to 3 do
for n:=1 to 12 do
Begin
Sound (Round (F[n]*(1 shl k)));
Delay (Temp);
NoSound
{нисходящая гамма}
for k:=3 downto 0 do
for n:=12 downto 1 do
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]); { ввести очередное а в конце текста }
L:=L+1;{}
writeln(ввести b[',j,'] элемент вектора b');
GotoXY(33,l);
ClrEol;
readln(b[j]); end;
cv:=5; { фиолетовый цвет для нового окна }
wind(20,2,80,18); GotoXY(2,2); l:=3;
for i:=1 to n do { начало перемножения матрицы на векторы }
begin c[i]:=0;
c[i]:=c[i]+ a[i,j]*b[j]; end;
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28