Известно, что откомпилированная программа размещается в отдельном сегменте памяти, т. е. не может превышать 64 Кбайта. Для создания больших программ в Турбо-Паскале предусмотрено подключение к основной программе откомпилированных модулей. Модуль включает в себя, как правило, большое число процедур, выполняющих однотипные операции, например, работа с графикой, операции с комплексными числами, матричные операции и т. д. Модуль определяется как программа, начинающаяся со служебного слова "Unit" и включающая в себя интерфейсную, исполняемую и инициирующую части.
Интерфейсная часть модуля начинается со служебного слова "Interface" и состоит из раздела описания глобальных имен типов, меток, констант, переменных, а также заголовков процедур, доступных основной программе.
Исполняемая часть модуля начинается со служебного слова "Implementation" и содержит полное описание процедур (заголовок, разделы описания и выполнения), заголовки которых перечислены в интерфейсной части, а также локальных имен типов, меток, констант и переменных, используемых в инициирующей части.
Инициирующая часть модуля начинается со служебного слова "Begin" и содержит блок операторов, выполняемых при подключении модуля к основной программе. Инициирующая часть вместе со словом "Begin" может отсутствовать или быть пустой. Заканчивается модуль служебным словом "End. " с точкой.
Содержимое исполняемой и инициирующей частей не доступно основной программе, связь модуля с основной программой осуществляется через интерфейсную часть модуля.
Отметим, что в интерфейсной части модуля запрещается делать опережающее описание процедур. Запрещается также рекурсия модулей.
Модуль записывается в файл с именем модуля, например, Name_M. pas. Затем файл компилируется, при этом получается файл с расширением ". tpu", например, Name_M. tpu, который автоматически записывается в каталог, указанный в опции Options, Directories, EXE & TPU, иначе - в текущий каталог. При запуске программы, использующей модуль, файл с расширением ". tpu" ищется в каталоге, указанном в опции Options, Directories, EXE & TPU или Unit Directories, либо в текущем каталоге.
Подключение модулей осуществляется в начале основной программы с помощью служебного слова "Uses" с указанием имен модулей, например:
Program Pr_1;
Uses Name_M1, Name_M2;
Если в основной программе имя идентификатора совпадает с именем, объявленным в интерфейсной части подключенного модуля, то используются значения, присвоенные идентификатору в программе. Если одинаковые имена встречаются в интерфейсной части подключенных модулей (например в Name_M1 и Name_M2), то используются значения, присвоенные идентификатору в последнем описанном модуле, т. е. в Name_M2.
Приведем пример разработки и подключения модуля. В модуле опишем процедуры работы с матрицами.
В основной программе 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. Можно использовать имена типов, заданные в интерфейсной части модуля или задавать новые имена типов.
1. 14. 1. Управление экраном в текстовом режиме
Модуль CRT служит для управления экраном в текстовом режиме, а также для управления клавиатурой и звуковыми сигналами. Модуль содержит библиотеку процедур (подпрограмм) и функций, которые выполняются при их вызове. Модуль подключается в начале раздела описания основной программы оператором Uses CRT;
Наименование Параметры процедуры Результат выполнения
процедуры процедуры
TextMode(N); N - тип Word Задание текстового режима
N=0 (40x25)-CGA- ч. б. работы монитора.
1 Xm x N=1 (40x25) -CGA, Экран очищается, курсор
1 N=2 (80x25) -EGA, VGA, устанавливается в позицию 1, 1.
N=3 (80x25) цветной Цвета - исходные: белые
N=N+256 (80x43)-EGA цветной символы на черном экране
Ym (80x50)-VGA цветной Наибольшие значения координат
N=7 (80x25)-монохромный; Хm:= Lo(WindMax)+1;
y ( 80 колонок х 25 строк ); Ym:= Hi(WindMax)+1;
Window(x1, y1, x2, y2); Задание окна на экране.
x1 x2 x1, y1, x2, y2 - тип Byte. Курсор устанавливается в пози-
y1 цию (1, 1) в системе координат
1 <= x1 < x2 <= Xm окна.
y2 1 <= y1 < 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>15, N:= N mod 16,
а также при N:= N + 128 -
вывод мерцающих символов
GotoXY(x, y); x, y - тип Byte Установка курсора в позицию
( x, y ) в системе координат
активного окна, экрана.
InsLine; Вставка пустой строки.
DelLine; Удаление строки в позиции курсора.
ClrEol; Стирание символов от позиции курсора до конца строки.
Кроме перечисленных, отметим процедуры управления яркостью символов: повышенная ( HighVideo; ), пониженная ( LowVideo; ) и нормальная ( NormVideo; ) яркость, а также функции, возвращающие номер текущего столбца ( WhereX; ) и номер текущей строки ( WhereY; ), типа - Byte.
В процедурах TextBackGround(N); и TextColor(N); параметр N назначает цвета:
При превышении допустимых пределов параметра N происходит преобразование N, при этом символы выводятся с мерцанием. Мерцание символов можно получить, также задавая: N:= N + 128;
В процедурах TextBackGround(N); и TextColor(N); можно применять параметр N, либо наименование цвета, например: