Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль_для_математиков.DOC
Скачиваний:
12
Добавлен:
04.05.2019
Размер:
3.05 Mб
Скачать

21. Модули. Создание и использование модулей

Наряду со стандартными модулями Паскаля вы можете создавать и использовать в программах свои собственные модули. Модуль имеет следующую структуру:

Unit имя модуля;

Interface

интефейсная часть

Implementation

внутренняя часть

Begin

исполняемая часть

End.

Имя модуля - идентификатор длиной не более 8 символов, причем файл, содержащий модуль, должен иметь такое же имя. После ключевого слова Interface располагаются описания типов, констант, переменных, функций и процедур, которые будут доступны пользователю этого модуля. Ключевое слово Implementation открывает внутреннюю часть модуля. В ней должны быть записаны все процедуры и функции, заголовки которых есть в интерфейсной части. Кроме того, во внутренней части можно описывать и другие переменные, константы, типы, функции и процедуры, но они уже будут недоступны другим программам. Исполняемая часть модуля может содержать обычные операторы, которые выполняются до начала выполнения программы, использующей этот модуль. Но, как правило, исполняемая часть пустая (а можно вообще не записывать слово Begin). Любой модуль может использовать другие модули как в интерфейсной, так и во внутренней части, но следует избегать перекрестных ссылок, когда модуль А использует модуль Б, а Б использует А. Напишем небольшой модуль.

Unit Service; {исходный текст модуля должен находиться в файле Service.pas}

Interface {интерфейсная часть модуля, константы OK и Error, переменная Result и процедуры DrawWindow и PrintString доступны любой программе, в которой есть оператор Uses Service}

Const

OK=0;

Error=-1;

Var

Result:ShortInt; {переменная возвращает значение OK или Error}

Procedure DrawWindow(x1,y1,x2,y2,BkColor:Byte); {процедура рисует на экране окно}

Procedure PrintString(x,y,BkColor,Color:Byte; s:String); {процедура выводит строку на экран}

Implementation {внутренняя часть модуля}

Uses Crt;

Var xSize,ySize : Byte;

{переменные, в которых хранятся размеры текущего окна}

Procedure Clear;

{внутренняя процедура, недоступная пользователям модуля}

Begin

TextAttr:=$07;

Window(1,1,80,25);

ClrScr;

End;

Procedure DrawWindow;

{во внутренней части список параметров указывать не обязательно}

Begin

If (x1<1)Or(x1>79)Or(x2<x1)Or(x2>80)Or

(y1<1)Or(y1>24)Or(y2<y1)Or(y2>25) Then Begin

{координаты окна неверны}

Result:=Error;

Exit;

End;

Window(x1,y1,x2,y2);

xSize:=x2-x1+1;

ySize:=y2-y1+1;

TextBackground(BkColor);

ClrScr;

Result:=OK; {вывод окна завершен удачно}

End;

Procedure PrintString;

Begin

If (x<1)Or(x>xSize)Or(y<1)Or(y>ySize) Then Begin

{координаты выводимой строки неверны}

Result:=Error;

Exit;

End;

GotoXY(x,y);

TextBackground(BkColor);

TextColor(Color);

Write(s);

Result:=OK; {вывод строки завершен удачно}

End;

Begin

{исполняемая часть модуля - экран будет очищен, прежде чем начнется выполнение программы}

Clear;

End.

Если откомпилировать этот модуль, то будет создан файл с именем SERVICE.TPU, который впоследствии и будут использовать наши программы (расширение TPU означает Turbo Pascal Unit). Например:

Uses Service;

Begin

Randomize;

Repeat

DrawWindow (1+Random(80), 1+Random(25),

1+Random(80), 1+Random(25), Random(8));

Until Result=OK;

Repeat

PrintString(1+Random(80),1+Random(25),

Random(8),Random(16),'OK');

Until Result=OK;

End.