- •1. Модуль crt
- •Назначение модуля crt, его подключение и использование
- •1.2. Процедуры управления цветом
- •1.3. Процедуры работы с экраном
- •Задания
- •1.4. Функции опроса клавиатуры
- •Задания
- •1.5. Процедуры и функции управления курсором
- •1.6. Процедуры работы со строками
- •1.7. Процедуры управления встроенным динамиком и таймером
- •2. Структурное программирование
- •2.1. Описание подпрограммы
- •2.2. Основные понятия структурного программирования
- •Литература
1.6. Процедуры работы со строками
Процедура ClrEOL. Стирает часть строки от текущего положения курсора до правой границы окна (экрана). Положение курсора не меняется.
Процедура DelLine. Уничтожает всю строку с курсором в текущем окне (или на экране, если окно не создано). При этом все строки ниже удаляемой (если они есть) сдвигаются вверх на одну строку.
Процедура InsLine. Вставляет строку: строка с курсором и все строки ниже ее сдвигаются вниз на одну строку; строка, вышедшая за нижнюю границу окна (экрана), безвозвратно теряется; текущее положение курсора не меняется.
Эти процедуры также могут оказаться полезными при разработке программ, использующих функции текстовых редакторов. Например, в предыдущем примере обработка клавиатуры может быть реализована следующим образом:
repeat
ch:=readKey;
case ch of
#77: x:=wherex+1;
#75: x:=wherex-1;
#72: y:=wherey-1;
#80: y:=wherey+1;
#79: InsLine;
#83: DelLine;
#82: InsLine;
…………….
#32: x:=x+1;
end;
…………….
Gotoxy(x,y);
until ch=#27;
С помощью этих процедур LowVideo, NortnVideo и HighVideo без параметров можно устанавливать соответственно пониженную, нормальную и повышенную яркость символов. Например:
Uses CRT;
begin
LowVideo;
WriteLn('Пониженная яркость');
NormVideo;
WriteLn('Нормальная яркость');
HighVideo;
WriteLn('Повышенная яркость')
end.
Заметим, что на практике нет разницы между пониженной и нормальной яркостью изображения.
1.7. Процедуры управления встроенным динамиком и таймером
Звуковые возможности ПК основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в ПК динамик и заставляют его звучать.
В модуль CRT включены три процедуры, с помощью которых можно запрограммировать произвольную последовательность звуков.
Процедура Sound заставляет динамик звучать с нужной частотой. Заголовок процедуры:
Procedure Sound(F: Word);
Здесь F — выражение типа Word, определяющее частоту звука в Герцах. После обращения к процедуре включается динамик и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.
Процедура NoSound выключает динамик. Если он к этому моменту не был включен, вызов процедуры игнорируется.
Процедура Delay. Обеспечивает задержку работы программы на заданный интервал времени. Заголовок процедуры:
Procedure Delay(T: Word);
Здесь Т — выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.
Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound —Delay—NoSound. Следующая программа заставит ПК воспроизвести простую музыкальную гамму. Используемый в ней массив 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]*(l 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.
Процедуру Delay удобно использовать для имитации анамации. Пример программы, в которой имитируется падение кубика в окне. Кубик несколько раз подскакивает и останавливается в нижней части окна.
Program DemoDvigenie;
Uses CRT;
Var i,b:integer;
Begin
TextBackGround(0);
ClrScr;
i:=2;
Window(15,2,55,24);
TextBackGround(Blue);
ClrScr;
Window(34,i,35,i);
TextBackGround(white);
ClrScr;
b:=2;
repeat
for i:=b to 24 do
begin
Window(15,2,55,24);
TextBackGround(Blue);
ClrScr;
Window(34,i,35,i);
TextBackGround(white);
ClrScr;
delay(1000);
end;
for i:=24 downto b do
begin
Window(15,2,55,24);
TextBackGround(Blue);
ClrScr;
Window(34,i,35,i);
TextBackGround(white);
ClrScr;
delay(1000);
end;
b:=b+2;
until b>24;
readln;
End.
