Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1364


10.2. модуль crt

 

Модуль CRT представляет собой библиотеку процедур и  описаний, которая расширяет возможности пользователя при работе с текстом, текстовым экраном и клавиатурой. Рассмотрим некоторые из них.

 

1)  TextMode(режим:  integer)  –  выбирает  указанный  текстовый режим

Режимы CRT:

BW40              = 0;      { 40x25 Ч/Б на цветном адаптере } CO40  = 1;      { 40x25 цветной на цветном адаптере} BW80              = 2;      { 80x25 Ч/Б на цветном адаптере } CO80  = 3;      { 80x25 цветной на цветном адаптере } Mono            = 7;      { 80x25 на монохромном адаптере } Font8x8 = 256;                      { Add–in for ROM font }

{ константы для установки режимов монитора } C40      = CO40;

C80     = CO80;

 

2) InsLine – начиная с позиции курсора, вставляет пустую строку.

 

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

 

3) DelLine – удаляет строку, на которой находится курсор.

Все строки, расположенные ниже удаляемой, перемещаются на одну строку вверх. А внизу экрана добавляется новая строка. Данная процедура зависит от текущего окна. Значение: очищает экран и ставит курсор в позицию с координатами (1,1).

4) TextBackground (цвет: byte) – выбирает фоновый цвет.

Параметр «цвет» представляет собой выражение целого типа.

Пример 10.4. uses Crt;

begin

{ зеленые символы на черном фоне} TextColor(Green); TextBackground(Black);

WriteLn('Hey there!');

{ мигаюшие ярко красные символы на сером фоне} TextColor(LightRed+Blink); TextBackground(LightGray);

WriteLn('Hi there!');

{ желтые символы на голубом } TextColor(14); { Yellow = 14 } TextBackground(Blue); WriteLn('Ho there!');

NormVideo; { оригинальный цвет } WriteLn('Back to normal...');

repeat until keypressed;

end.

 

5) ClrScr – очистка экрана.

Все позиции символов заполняются пробелами. При этом исполь-

зуются текущий фоновый цвет, заданный в процедуре TextBackGround.

 

6) TextColor (цвет: byte) – устанавливает цвет символов.

{ константы для установки цвета}

Black{черный} = 0; Blue{синий}     = 1; Green        = 2; Cyan{голубой} = 3; Red{красный} = 4; Magenta                     = 5; Brown{корич.} = 6; LightGray     = 7;

{ константы общего цвета }

DarkGray                     = 8; LightBlue               = 9; LightGreen            = 10; LightCyan                       = 11; LightRed                         = 12; LightMagenta = 13; Yellow         = 14; White      = 15; Blink       = 128;

 

7) Window(x1, y1, x2, y2) – определяет на экране текстовое окно.

Параметры x1, y1 представляют собой координаты верхнего левого угла окна, параметры x2, y2 – координаты правого нижнего угла. Минимальный размер – один столбец на одну строку.

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

Рассмотрим  пример 10.5. Вывод в окна в программе поиска суммы четных элементов ниже побочной диагонали.

Пример 10.5.

 

program mas3;

uses crt;

 

const    a:array[1..5,1..5] of integer=((0,1,2,3,4), (5,6,7,8,9), (0,1,2,3,4), (5,6,7,8,9), (0,1,2,3,4));

var begin

 

 

i,j:byte;

k:integer;

 

textbackground(0);

clrscr; textcolor(5); window(5,5,21,12); textbackground(3); clrscr;

writeln('Дана матрица:');

for i:=1 to 5 do begin

for j:=1 to 5 do begin

if (i+j>6) and (a[i,j] mod 2=0) AND (A[i,j]<>0) THEN            textcolor(4)

else      textcolor(0);

write(a[i,j]:3);

end;

writeln;

end; textcolor(0); writeln;

window(26,10,78,13);

 

textbackground(13);

clrscr;

writeln(' Задание:найти сумму четных элементов,расположенных');

writeln(' ниже побочной диагонали.');

k:=0;

 

 

end.

for i:=1 to 5 do for j:=1 to 5 do

if (i+j>6) and (a[i,j] mod 2=0) then k:=k+a[i,j];

writeln; window(50,19,65,20); clrscr; write('Результат '); writeln(k);

READLN;

 

 

8) GoToXY(x, y: byte) – позиционирует курсор.

 

Курсор перемещается в ту позицию внутри текущего окна,  которая задана координатами  x  и y (x  задает столбец,  y  задает строку). Верхний левый угол задается координатами (1,1)

пример:           Window(1,10,60,20); GoToXY(1,1);

Это приведет к тому, что курсор уйдет в точку с абсолютными координатами (1,10).

 

9) WhereX и WhereY возвращают для текущей позиции курсора относительно текущего окна координаты X и Y соответственно.

Тип результата Byte.

 

10) Delay(мсек : word) – выполняет задержку на заданное число миллисекунд.

Параметр «мсек» задает число миллисекунд интервала ожидания.

Но данная процедура является приблизительной, поэтому период задержки не будет точно равняться заданному числу миллисекунд.

 

11) READKey – считывает символ с клавиатуры.

Считываемый символ не отображается на экране. Если перед обращением к функции READKey функция KeyPressed имела значение TRUE, то символ считывается немедленно, в противном случае функция ожидает нажатия клавиши. При нажатии спецальных клавиш функция READKey возвращает сначала нулевой символ (0), а затем расширенный скен–код клавиши.

Программа вывода ASCII кода алфавитно цифровых клавиш клавиатуры

uses Crt;

var

C: Char;

begin

Writeln('Please press a key'); C := READkey;

Writeln(' You pressed ', C, ', whose ASCII value is ', Ord(C), '.');

end.

 

12) KeyPressed – возвращает значение TRUE, если на клавиатуре нажата клавиша и FALSE – в противном случае.

Примечание: символ (или символы) остаются в буфере клавиатуры. Данная  процедура  не  распознает  клавиш  перевода  регистра,  таких  как Shift, Alt, NumLock и т.д.

 

Пример использования KeyPressed uses Crt;

begin repeat

Write('Xx');      { выводит надпись Хх пока не будет }

until KeyPressed;          { нажата какая–либо клавиша }

end.

 

13)  Sound  –  является  процедурой,  включающей  внутренний динамик.

Описание: Sound(герц: word); где параметр «герц» задает частоту генерируемого сигнала в герцах. Звук будет звучать до тех пор, пока не будет выключен посредством обращения к процедуре NoSound;

 

14) NoSound – выключает внутренний динамик. Пример использования Sound, Delay, NoSound. uses Crt;

begin

Sound(220); { включить звук } Delay(300); { ждать 300 ms            } NoSound;     { выключить звук }

end.

 

Задания для самостоятельного выполнения

1. Разработать функцию, реализующую запрос одной из двух альтернатив

«ДА – НЕТ» и возвращающую номер выбранной альтернативы. («ДА» – 1,

«НЕТ» – 2»).Запрос организовать в форме  вертикального меню в центре экрана с выбором с помощью навигационной клавиатуры.

2. Разработать функцию, входными данными для которой является массив из N строк. Функция должна вывести на экран строки в виде вертикального меню  (координаты  верхнего  левого  угла  меню  фиксированы).  Выбор

нужной  строки  осуществить  с  помощью    навигационной  клавиатуры.

Функция должна возвращать номер выбранной строки.

3. Разработать функцию, входными данными для которой является массив из N строк. Функция должна вывести на экран строки в виде горизонтального меню (координаты верхнего левого угла меню фиксированы). Выбор нужной строки осуществить с помощью первой буквы этой строки. Функция должна возвращать номер выбранной строки.

4.   Разработать   процедуру,   организующую   вывод   в   центр   экрана

«всплывающего» окна до заданных пределов. Процесс «всплытия» должен происходить с замедлением по времени (обеспечивающим наблюдение  за ним). После завершения формирования окна вывести в него произвольную строку. Входными данными для процедуры являются предельные размеры окна и строка, выводимая в него.

5.  Разработать  процедуру,  входными    данными  для  которой  является массив из 5 строк вида: «F1 – XXXX», «F2 – XXX»,..., «F5 – XXX», где XXX – произвольная комбинация символов.

Процедура должна  вывести на экран строки в виде горизонтального меню (координаты верхнего левого угла меню фиксированы). Выбор нужной  строки осуществить с помощью выбора нужной функциональной клавиши. Процедура должна возвращать номер выбранной строки.