Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
chast2.doc
Скачиваний:
7
Добавлен:
03.11.2018
Размер:
413.7 Кб
Скачать

5.2. Модуль пользователя.

Рассмотрим общую структуру модуля:

UNIT <идентификатор>; {Заголовок модуля}

INTERFACE {Интерфейсная секция}

[USES <список модулей>;]

<раздел описаний>;

IMPLEMENTATION {Исполняемая часть}

[USES <список модулей>;]

<раздел описаний>;

<раздел процедур и функций>;

(<раздел операторов>. | END.)

Раздел Unit содержит имя библиотечного модуля. Оно должно совпадать с именем дискового файла, где содержится исходный текст модуля. Например, если файл называется Stat.pas, то модуль должен иметь то же имя:

Unit Stat;

Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается специальным предложением

Uses <список модулей>;

где Uses – служебное слово, <список модулей> - список модулей, с которыми устанавливается связь; элементами списка являются имена модулей, отделяемые друг от друга запятыми, например:

Uses CRT, Stat;

Если модуль используется в основной программе, то предложение Uses должно открывать раздел описаний программы. Если модуль используется в другом модуле, то предложение Usesможет следовать либо сразу за служебным словом Interface, либо сразу за служебным словом Implementation. Помните: если модуль использует другие модули, то имена этих модулей также должны быть указаны в предложении Uses, причем до имени того модуля, который их использует!

В интерфейсной секции указываются описания глобальных констант, типов, переменных, а также приводятся заголовки глобальных процедур и функций, которые могут стать доступными основной программе или другим модулям.

Интерфейсная секция – это как бы «видимая» часть модуля, через которую осуществляется взаимодействие данного модуля с программой и другими модулями. Объявление подпрограмм в интерфейсной части автоматически сопровождается их компиляцией с использованием дальней модели памяти, чем обеспечивается доступ к этим подпрограммам из основной программы и других модулей.

Все константы и переменные, объявленные в интерфейсной части модуля, равно как и глобальные объекты основной программы, помещаются компилятором Turbo Pascal в общий сегмент данных. Порядок появления различных разделов объявлений и их количество могут быть произвольными. По механизму действия интерфейсная секция аналогична опережающему описанию.

Секция реализации – исполняемая часть модуля, где размещают описания объявленных в интерфейсной части подпрограмм, а также описания локальных для модуля объектов – вспомогательных типов, констант, переменных, процедур, функций и меток, используемых в инициализирующей части. Это как бы «скрытая» от пользователя часть модуля.

Объявленные ранее в интерфейсной части глобальные процедуры и функции должны описываться в той же последовательности, что и их заголовки в интерфейсной части. При этом в заголовках процедур и функций исполняемой части разрешается опускать список формальных параметров и тип результата для функций, так как они уже описаны в интерфейсной части. Но если заголовок приводится в полном виде, то он должен совпадать с заголовком интерфейсной части.

Подпрограммы, локальные для секции реализации (т. е. не описанные в интерфейсной секции), должны иметь полный заголовок.

Пример 5.2.1.

Напишем программу, производящую операции над комплексными числами (умножение, сложение и деление). При этом:

(a + b*i)*(c + d*i) = (a*c – b*d) + (a*d +b*c)*i

(a + b*i) + (c + d*i) = (a + c) + (b + d)*i

(a + b*i)/(c + d*i) = ((a*c + b*d) + (b*c – a*d)*i)/(c2 + d2)

UNIT RE;

INTERFACE

FUNCTION SLO (X, Y: REAL): REAL;

FUNCTION UMN (X, Y: REAL): REAL;

FUNCTION DEL (X, Y: REAL): REAL;

IMPLEMENTATION

FUNCTION SLO;

BEGIN

SLO:= X + Y

END;

FUNCTION UMN;

BEGIN

UMN:= X*Y

END;

FUNCTION DEL;

BEGIN

DEL:= X/Y

END;

END.

UNIT COMP;

INTERFACE

USES RE;

PROCEDURE SLOC (A, B, C, D: REAL; VAR A1, B1: REAL);

PROCEDURE UMNC (A, B, C, D: REAL; VAR A1, B1: REAL);

PROCEDURE DELC (A, B, C, D: REAL; VAR A1, B1: REAL);

IMPLEMENTATION

PROCEDURE SLOC;

BEGIN

A1:= SLO (A, C);

B1:= SLO (B, D)

END;

PROCEDURE UMNC;

BEGIN

A1:= SLO (UMN (A, C), -UMN (B, D));

B1:= SLO (UMN (A, D), UMN (B, C))

END;

PROCEDURE DELC;

BEGIN

A1:= DEL (SUM (UMN (A, C), UMN (B, D)), SUM (SQR (C), SQR (D)));

B1:= DEL (SUM (UMN (B, C), -UMN (A, D)), SUM (SQR (C), SQR (D)));

END;

END.

USES COMP; {основная программа}

VAR

A, B, C, D, AC, BD: REAL;

BEGIN

WRITE (‘Действительная и мнимая часть первого числа? ‘);

READLN (A, B);

WRITE (‘Действительная и мнимая часть второго числа? ‘);

READLN (C, D);

SLOC (A, B, C, D, AC, BD);

WRITELN (A, ’+’, B, ’i’, ’+’, C, ’+’, D, ’i=’, AC, ’+’, BD, ’i’);

UMNC (A, B, C, D, AC, BD);

WRITELN (A, ’+’, B, ’i’, ’*’, C, ’+’, D, ’i=’, AC, ’+’, BD, ’i’);

DELC (A, B, C, D, AC, BD);

WRITELN (A, ’+’, B, ’i’, ’/’, C, ’+’, D, ’i=’, AC, ’+’, BD, ’i’);

END.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]