лек.№6 информ
.pdfЛЕКЦИЯ 7. ПАСКАЛЬ. РАЗРАБОТКА И ИСПОЛЬЗОВАНИЕ МОДУЛЕЙ
ПЛАН
6.1.РАЗРАБОТКА МОДУЛЕЙ
6.2.СТАНДАРТНЫЕ МОДУЛИ
6.2.1.Модуль СRT
6.2.1.1Управление экраном в текстовом режиме
6.2.1.2Управление клавиатурой
6.2.1.3Работа с символьными переменными
6.2.1.4Работа со строковыми переменными
6.2.1.5Управление звуковыми сигналами
6.1. Разработка модулей
Unit
Интерфейсная часть, Interface (описание глобальных имен типов, меток, констант, переменных, а также заголовков процедур, доступных основной программе).
Исполняемая часть, Implementation (описание процедур: заголовок, разделы описания и выполнения, заголовки которых перечислены в интерфейсной части, а также локальных имен типов, меток, констант и переменных, используемых в ини-
циирующей части). |
|
|
||
|
Инициирующая часть , Begin.. End. (блок операторов, |
выполняемых при под- |
||
ключении модуля к основной программе). |
|
|
||
|
Фрагмент 1. |
|
|
|
|
Структура модуля имеет вид: |
|
|
|
|
Unit Name_M; { Name_M - имя модуля } |
|
|
|
{----------------------------------------------------------------------------------------------------------------- |
|
|
} |
|
|
Interface { Интерфейсная часть модуля} |
|
|
|
{------------------------------------------------------------ |
|
раздел описания глобальных имен} |
||
|
Type MM=array[1..10, 1..10] of real; {описание типа} |
|
||
|
Var Max_F, Min_F: real; {описание глобальных переменных} |
|||
{------------------------------------------------------------------------------------------------------------------ |
|
|
} |
|
|
Procedure Name_P(p1: real; p2: MM); |
|
|
|
|
{описание заголовков процедуры} |
|
|
|
|
Function Name_f(p3,p4:real):real; { и функции} |
|
||
{----------------------------------------------------------------------------------------------------------------- |
|
|
} |
Implementation |
{Исполняемая часть модуля} |
{--------------------------------------------------------------- |
раздел описания локальных имен} |
Const C = 'Подключен модуль Name_M';
{ задание локальной константы}
Procedure Name_P; {Полное описание процедуры}
{ Раздел описания процедуры}
Begin { Раздел выполнения процедуры} End;
Function Name_f: real; {Полное описание функции}
{ Раздел описания функции} |
|
Begin { Раздел выполнения функции} |
End; |
{----------------------------------------------------------------------------------------------------------------- |
} |
BEGIN { Инициирующая часть модуля} |
|
Writeln(C); {операторы модуля} |
|
END.
Модуль записывается в файл с именем модуля, например, Name_M. pas.
Затем файл компилируется, например, Name_M. tpu, и записывается в каталог, указанный в опции Options, Directories, EXE & TPU, иначе - в текущий каталог.
При запуске программы, использующей модуль, файл с расширением ". tpu" ищется в каталоге, указанном в опции Options, Directories, EXE & TPU или Unit Directories, либо в текущем каталоге.
Program Pr_1;
Uses Name_M1, Name_M2;
Фрагмент 2. Пример разработки и подключения модуля работы с матрицами.
Unit MATR_1; |
|
{-------------------------------------------------------------------------------------------------------------- |
} |
Interface |
|
{-------------------------------------------------------------------------------------------------------------- |
} |
Type |
M = array[1..10, 1..10] of real; |
M1 = array[1..10] of real; |
Procedure MAT_1(a:M; var b:M; n: word); |
||
Procedure MAT_2(a:M; var b:M1; n: word); |
||
{-------------------------------------------------------------------------------------------------------------- |
|
} |
Implementation |
|
|
{-------------------------------------------------------------------------------------------------------------- |
|
} |
Procedure MAT_1;{создание матрицы "B", транспонированной к "A"} |
||
var i, j: word; |
|
|
begin |
for i:=1 to N do |
for j:=1 to N do b[i,j]:=a[j,i] |
end; |
|
|
{------------------------------------------------------------------------------------------------------------- |
|
} |
Procedure MAT_2; {расчет квадратов диагональных элементов} |
||
var i, j: word; |
|
|
begin |
for i:=1 to N do |
b[i]:=a[i,i]*a[i,i] |
end; |
|
|
{--------------------------------------------------------------------------------------------------------------- |
|
} |
END. |
|
|
Пояснение работы:
В основной программе PR_1 подключается модуль MATR_1 и используются проце-
дуры MAT_1 и MAT_2.
Program PR_1;
Uses MATR_1;
Type MM = M; MM1 = M1;
Var a1,a2,a3: MM; b1,b2: MM1; i,j,n: word;
Begin Writeln('введите размерность матрицы N='); Readln(n);
Randomize;
for i:=1 to n do for j:=1 to n do a1[i,j]:=random(20)+1; MAT_1(a1, a2, n); MAT_1(a2, a3, n);
MAT_2(a1, b1, n); MAT_2(a2, b2, n) end.
В результате двойного транспонирования исходной матрицы "a1" (из "a1" в "a2", из "a2" в "a3") получается матрица "a3" тождественная "a1" .
Матрицы "b1" и "b2" содержат квадраты диагональных элементов матриц "a1" и "a2". Типы массивов фактических параметров должны соответствовать типам массивов формальных параметров, описанных в модуле MATR_1. Можно использовать имена типов, заданные в интерфейсной части модуля или задавать новые имена типов.
6.2.Стандартные модули
6.2.1.Модуль СRT
6.2.1.1 Управление экраном в текстовом режиме
Uses CRT;
|
|
Табл. 1 |
Наименование |
Параметры процедуры |
Результат выполнения |
процедуры |
|
процедуры |
TextMode(N); |
N - тип Word |
Задание текстового режима ра- |
N=0 |
(40x25)-CGA- ч. б. |
боты монитора. |
|
|
|
N=1 |
(40x25) -CGA, |
Экран очищается, курсор уста- |
N=2 |
(80x25) -EGA, VGA, |
навливается в позицию 1, 1. |
N=3 |
(80x25) цветной |
Цвета исходные: белые символы |
N=N+256 |
(80x43)-EGA цветной |
на черном экране |
Ym |
(80x50)-VGA цветной |
Наибольшие значения координат |
N=7 |
(80x25)-монохромный; (80 |
Хm:= Lo(WindMax)+1; |
|
колонок х 25 строк ); |
Ym:= Hi(WindMax)+1; |
|
|
|
Window(x1, y1, x2, |
x1, y1, x2, y2 - тип Byte |
Задание окна на экране. Курсор |
y2); |
1 <= x1 < x2 <= Xm, 1 <= y1 |
устанавливается в позицию (1, 1) |
|
< y2 <= Ym |
в системе координат окна. Пре- |
|
в системе координат экра- |
вышение координат экрана игно- |
|
на. |
рируется. |
Наименование |
Параметры процедуры |
Результат выполнения |
процедуры |
|
процедуры |
TextBackGround(N); |
N - тип Byte, 0 <=N<= 7 |
Назначение цвета фона. При |
|
|
N>7 N:= N mod 8 |
Clrscr; |
Использование процедуры |
Очистка активного окна, экрана |
|
после TextBackGround(N); |
курсор устанавливается в пози- |
|
закрашивает активное окно |
цию (1, 1). Закрашивание окна. |
TextColor(N); |
N - тип Byte 0 <=N<= 15 а |
Назначение цвета символов. |
|
также при N:= N + 128 вы- |
При N>15, N:= N mod 16, |
|
вод мерцающих символов - |
|
GotoXY(x, y); |
x, y - тип Byte |
Установка курсора в позицию ( |
|
|
x, y ) в системе координат актив- |
|
|
ного окна, экрана. |
InsLine; |
|
Вставка пустой строки. |
DelLine; |
|
Удаление строки в позиции |
|
|
курсора. |
ClrEol; |
|
Стирание символов от позиции |
|
|
курсора до конца строки. |
Процедуры управления яркостью символов:
|
повышенная (HighVideo;), |
|
|
|
|
|
пониженная (LowVideo;) |
|
|
|
|
|
нормальная (NormVideo;) |
|
|
|
|
|
Функции, возвращающие |
номер |
текущего столбца (WhereX;) и строки |
||
(WhereY;), типа - Byte. |
|
|
|
|
|
|
В процедурах TextBackGround(N); и TextColor(N); параметр N назначает цвета: |
||||
|
|
|
|
|
Табл. 2 |
0 |
Black, черный |
|
8 |
|
DarkGray, темно-серый |
1 |
Blue, синий |
|
9 |
|
LightBlue, ярко-синий |
2 |
Green, зеленый |
|
10 |
|
LightGreen, ярко-зеленый |
3 |
Cyan, голубой |
|
11 |
|
LightCyan, ярко-голубой |
4 |
Red, красный |
|
12 |
|
LightRed, ярко-красный |
5 |
Magenta, фиолетовый |
|
13 |
|
LightMagenta, ярко-фиолетовый |
6 |
Brown, коричневый |
|
14 |
|
Yellow, желтый |
7 |
LightGray, ярко-серый |
|
15 |
|
White, белый |
|
Мерцание символов можно получить, |
также задавая: N:= N + 128; |
|||
|
В процедурах TextBackGround(N); |
и TextColor(N); вместо N можно использо- |
|||
вать наименование цвета, например: |
|
N:=1; TextColor(N); { либо } TextColor(Blue);
6.2.1.2 Управление клавиатурой
KeyPressed; - возвращает значение True (тип Boolean) - если была нажата любая клавиша (кроме Ctrl, Alt, NumLock и т. п. ), иначе - False.
ReadKey; - возвращает символ нажатой клавиши (тип Char).
Repeat Writeln('Нажмите скорее любую клавишу') until KeyPressed; Repeat Writeln('Нажмите клавишу "А"'); c:=ReadKey until c='А';
Для очистки буфера клавиатуры применяются операторы:
While KeyPressed Do c:=ReadKey;
Фрагмент 3.
Приведем пример программы, выводящей на экран в различных текстовых режимах надпись в виде ступеньки с заданным шагом "dx" по оси "х", в каждой строке "у" , начиная с позиции (1, 1).
PROGRAM FAM; Uses CRT;
var N : word; f, dx, x, y, i, j, xm, ym : byte; BEGIN
for i:=0 to 9 do begin {режимы работы монитора } if i<4 then N:=i else N:=256+i-4; if i=9 then N:=7;
textMode(N);
xm:=lo(WindMax)+1; ym:=hi(WindMax)+1; write('xm=',xm, '_ym=',ym, '_N=',N, '_Нажмите Enter');readln; TextBackGround(1);clrscr;TextColor(14);x:=1;
f:=8; dx:=3; { f - длина фамилии + курсор, dx - приращение отступа} for j:=1 to ym-1 do begin y:=j;
if (xm-x-f)<0 then x:=1; { контроль выхода надписи за экран } gotoXY(x, y); write('ФАМИЛИЯ'); x:= x + dx; end; Writeln; write('Нажмите Enter'); readln end;
TextMode(3)
END.