Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по Паскалю отредактированное №2..doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
263.68 Кб
Скачать

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, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение сле­дующего оператора программы.

Для генерации звукового сигнала обычно используется вызов опи­санных процедур по схеме 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]*(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.