Процедуры и функции могут быть сгруппированы в отдельный модуль. Модуль (unit)- это программная единица, текст которой компилируется автономно (независимо от главной программы). Если модуль откомпилирован для реального режима, то результат имеет расширение TPU; модули, откомпилированные для защищенного режима, имеют расширение TPP. Структура модуля отличается от структуры обычной программы на языке Турбо Паскаль. Модули имеют четыре основные части: заголовок, который следует за зарезервированным словом UNIT; описательную (интерфейсную) часть, которая начинается за зарезервированным словом INTERFACE (в ней помещаются объявления переменных, процедур, функций, констант и типов данных, которые должны быть доступны для других программных модулей, использующих данный модуль); исполнительную (внутреннюю) часть, которая начинается словом IMPLEMENTATION (в нее входит текст подпрограмм и локальные объекты, доступные только внутри данного модуля) и необязательную часть (секцию инициализации), расположенную после исполнительной части между словами BEGIN и END (при этом, если инициализация модуля не нужна, то в секции помещается лишь слово END). При описании подпрограмм модуля допустимо использовать сокращенные заголовки (без параметров и указания типа результата для функции) как, например, в случае использования директивы FORWARD. Начинается модуль заголовком, состоящим из зарезервированного слова UNIT и имени модуля. Имя модуля обязательно должно совпадать с именем файла (имеющим расширение PAS), в котором он находится. Модуль имеет следующую структуру:
UNIT <имя модуля>; INTERFACE USES <список подключаемых модулей>; TYPE <описание типов, определенных в данном модуле и доступных для других модулей>;
CONST <описание констант, определенных в данном модуле и доступных для других модулей >;
VAR <описание переменных, определенных в данном модуле и доступных для других модулей >;
PROCEDURE <заголовки процедур, определенных в данном модуле и доступных для других модулей >;
FUNCTION <заголовки функций, определенных в данном модуле и доступных для других модулей >;
IMPLEMENTATION
USES <список подключаемых модулей>;
TYPE <описание типов, определенных в данном модуле и недоступных для других модулей>;
CONST <описание констант, определенных в данном модуле и недоступных для других модулей >;
VAR <описание переменных, определенных в данном модуле и недоступных для других модулей >;
PROCEDURE <реализация процедур, определенных в данном модуле и доступных для других модулей >;
FUNCTION <реализация функций, определенных в данном модуле и доступных для других модулей >;
PROCEDURE <заголовки и реализация процедур, определенны в данном модуле и недоступных для других модулей >;
FUNCTION <заголовки и реализация функций, определенных в данном модуле и недоступных для других модулей >;
BEGIN< это слово необходимо, если имеются операторы секции инициализации>
<Необязательная часть модуля>
END.
Интерфейсная и реализационная части могут быть пустыми, но присутствовать должны обязательно. При подключении модуля вначале выполняются операторы секции инициализации (если они имеются), а затем операторы основного блока главной программы, в которую включен данный модуль.
Рассмотрим пример. Требуется написать главную программу, в которой вводится размерность вектора и элементы вектора и вызывается процедура сортировки одномерного массива целых чисел в порядке возрастания. Длина массива не превышает 100. Процедуру оформить в виде модуля.
USES CRT,MODSORT; VAR A:MAS;
I:BYTE; N:BYTE;
BEGIN
WRITELN('ВВОД ИСХОДНЫХ ДАННЫХ:'); READLN(N); FOR I:=1 TO N DO