ИСПОЛЬЗОВАНИЕ БИБЛИОТЕКИ CRT В PASCAL
Разработчики Паскаля предусмотрели несколько подпрограмм, существенно увеличивающих возможности текстового ввода/вывода. Эти программы сосредоточены в библиотеке (модуле) CRT, входящей в комплект поставки Паскаля.
Текстовой вывод на экран
TextColor (Color) – процедура задает цвет выводимых символов.
TextBackground (Color) – процедура задает цвет фона.
Единственным параметром обращения к этим процедурам должно быть выражение типа Byte, задающее код нужного цвета.
0 - Черный 1 - Темно-синий 2 - Темно-зеленый 3 - Бирюзовый 4 - Красный 5 - Фиолетовый б - Коричневый 7 - Светло-серый 8 - Темно-серый | 9 - Синий 10-Светло-зеленый 11-Светло-бирюзовый 12- Розовый 13- Малиновый 14- Желтый 15- Белый 128- Мерцание символа |
ClrScr - процедура очищает экран или окно.
Window (X1,Y1,X2,Y2) - процедура задает размер области экрана, которая в дальнейшем будет рассматриваться процедурами вывода как весь экран.
Сразу после вызова процедуры курсор помещается в левый верхний угол окна, а само окно очищается (заполняется цветом фона). По мере вывода курсор, как обычно, смещается вправо и при достижении правой границы окна переходит на новую строку, а если он к этому моменту находился на последней строке, содержимое окна сдвигается вверх на одну строку, т.е. осуществляется «прокрутка» окна.
X1,Y1 - координаты левого верхнего, X2,Y2 - координаты правого нижнего углов окна.
GotoXY(x,y) - процедура; переводит курсор в нужное место экрана или текущего окна.
WhereX,WhereY - функции; определяют текущие координаты курсора (горизонтальную и вертикальную).
ClrEOL - процедура; cтирает часть строки от текущего положения курсора до правой границы окна (экрана). Положение курсора не меняет.
DelLine - процедура; уничтожает всю строку с курсором в текущем окне (или на экране, если окно не создано). При этом все строки ниже удаляемой (если они есть) сдвигаются вверх на одну строку.
InsLine - процедура; вставляет строку: строка с курсором и все строки ниже ее сдвигаются вниз на одну строку; строка, вышедшая за нижнюю границу окна (экрана), безвозвратно теряется; текущее положение курсора меняется.
Изменение цвета текста uses CRT;
Begin
Textcolor(2);
writeln('Тёмно - зелёный текст');
End.
Изменение цвета фона uses CRT;
Begin
TextBackground(13);
writeln('Цвет фона - малиновый');
End.
Изменение цвета текста и фона uses CRT;
Begin
TextBackground(5);
textcolor(13);
writeln('малиновый текст на фиолетовом фоне');
End.
Все цвета текста и все цвета фона uses CRT;
var
i,j:byte;
Begin
for j:=0 to 15 do
begin
TextBackground(j);
write(j, ' фон - ');
for i:=0 to 15 do
begin
textcolor(i);
write(i,'цв.');
end;
writeln;
end;
End.
Создание окон на экране uses CRT;
Begin
TextBackground(0);
clrscr;
TextBackground(3);
window(5,2,30,6);
clrscr;
writeln(' окно № 1');
TextBackground(4);
window(38,12,70,24);
clrscr;
writeln(' окно № 2');
End.
Изучаем смещение в окне uses CRT;
Begin
TextColor(1);
TextBackground(0);
ClrScr;
window(5,5,25,10);
TextColor(0);
TextBackground(1);
ClrScr;
GotoXY(3,5);
write('смещение в окне');
GotoXY(8,2);
write('изучаем');
End.
Программирование клавиатуры
Функция KeyPressed. Возвращает значение типа Boolean, указывающее состояние буфера клавиатуры: False означает, что буфер пуст, а True - что в буфере есть хотя бы один символ, еще не прочитанный программой.
Стандартная длина буфера клавиатуры рассчитана на хранение до 16 в символов. Если пользователь нажимает клавиши, буфер может оказаться переполненным. В этот момент раздается звуковой сигнал и «лишние» коды.
Функция ReadKey. Возвращает значение типа Char. При обращении к этой функции анализируется буфер клавиатуры: если в нем есть хотя бы один не прочитанный символ, код этого символа, берется из буфера и возвращается в качестве значения функции, в противном случае функция будет ожидать нажатия на любую клавишу.
Программа позволит Вам определить расширенный код любой клавиши. Для завершения работы программы нажмите клавишу Esc.
USES crt;
VAR
c:char;
Begin
repeat
c:=ReadKey;
if c#0 then writeln(ord(c))
else writeln('0',ord(ReadKey):8)
until c=#27
End.
Программа, которая позволит управлять каким либо символом по экрану (напрмер О) клавишами управления курсора.
Для имитации движения будем использовать следующий принцип: рисуем символ О, затем его вытираем и рисуем рядом, выше(ниже) или справа(слева) в зависимости от выбранного направления. Таким образом нам будет казаться, что символ движется.
Для рисования символа и для его вытирания используем процедуры.
USES crt;
VAR
x,y,n:byte;
c:char;
procedure dwig_0;
begin
gotoXY(x,y);
writeln(' ');
end;
procedure dwig_1;
begin
gotoXY(x,y);writeln('О');
end;
Begin
ClrScr;
x:=40;y:=12;
gotoXY(x,y); writeln('О');
repeat
c:=ReadKey;
if c=#0 then
begin
N:=ord(ReadKey);
if n=72 then begin dwig_0;y:=y-1;dwig_1;end;
if n=80 then begin dwig_0;y:=y+1;dwig_1;end;
if n=75 then begin dwig_0;x:=x-1;dwig_1;end;
if n=77 then begin dwig_0;x:=x+1;dwig_1;end;
end;
until c=#27
End.
Программирование звукового генератора
Звуковые возможности ПК основаны на одноканальном управляемом звуковом генераторе, вырабатывающем электромагнитные колебания звуковой частоты. Колебания подаются на встроенный в ПК динамик и заставляют его звучать.
В модуль CRT включены три процедуры, с помощью которых Вы сможете запрограммировать произвольную последовательность звуков.
Sound (H) - процедура; заставляет динамик звучать с нужной частотой.
Здесь H — выражение типа Word, определяющее частоту звука в герцах. После обращения к процедуре включается динамик, и управление немедленно возвращается в основную программу, в то время как динамик будет звучать впредь до вызова процедуры NoSound.
NoSound – процедура; выключает динамик. Если динамик не был включен, вызов процедуры игнорируется.
Delay(Т) - процедура; обеспечивает задержку работы программы на заданный интервал времени.
Здесь Т — выражение типа Word, определяющее интервал времени (в миллисекундах), в течение которого задерживается выполнение следующего оператора программы.
Для генерации звукового сигнала обычно используется вызов описанных процедур по схеме Sound—Delay—NoSound.
Звуковой сигнал
Uses Crt;
Begin
Sound(1000);
delay(10000);
NoSound;
End.
Воспроизведение музыкальной гаммы. 1,2,3,4 октавы.
Массив W содержит частоты всех полутонов в первой октаве от “до” до “си”. При переходе от одной октавы к соседней частоты изменяются в два раза.
Uses Crt;
const n=12; temp=4000;
w:array[1..n] 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);
var i,j:byte;
Begin
i:=1;
while i
begin
for j:=1 to 12 do
begin
Sound(round(w[j]*i));
delay(temp);
NoSound;
end;
delay(3*temp);
i:=i*2;
end;
End.