Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по Паскалю.doc
Скачиваний:
33
Добавлен:
04.06.2015
Размер:
7.33 Mб
Скачать

Var f: Text;

{определение площади треугольника по формуле Герона – по трем его сторонам a, b, c – вещественного типа}

Function Geron(a, b, c: Real): Real;

{обмен значениями двух переменных x и y - вещественного типа}

Procedure Swap(Var x, y : Real);

Implementation раздел реализации

Function Geron;

Var p: Real;

Begin

p := (a + b + c) / 2.0; {полупериметр}

Geron := Sqrt(p * (p –a) * (p – b) * (p – c));

End;

Procedure Swap;

Var temp: Real;

Begin

temp := x;

x := y;

y := temp;

End;

Begin инициирующий раздел

Assign(f, ‘D:\User\f.txt’);

End.

Сохраним этот файл на диске с именем My_modul.pas.

Компиляция модулей

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

Результатом компиляции модуля является файл с тем же именем и расширением tpu (Turbo Pascal Unit), который можно хранить на диске так же, как иexe-файл.

Меню Compile, управляющее процессом компиляции, содержит следующиеопции:

Compile

Make

Build

Destination (Memory, Disk)

Primary File

Первые три опции – это режимы компиляции:

Compile– все модули, входящие в компилируемый модуль, должны быть предварительно откомпилированы (имеется ихобъектныйкод). Если какой-либо файл tpuне обнаружен, то система ищет одноименный файл с исходным текстом (расширениемpas) и при обнаружении компилирует его,

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

Build– автоматически компилируютсявсемодули, независимо от времени их обновления. Это самый надежный, но и самый медленный режим подготовки модульной программы.

Далее идут опции:

Destination– для задания места сохраненияtpu- иexe-файлов: при значенииDiskони будут сохранены на текущем диске,Memory– в оперативной памяти. В средеBorland Pascalэти файлы автоматически сохраняются на диске, там нет этой опции в менюCompile,

Primary File– позволяет задавать файл, который будет автоматически добавляться в начало исходного текста перед компиляцией. Таким способом удобно отлаживать модули, подключая к ним головную программу в качествеPrimary File. При этом в процессе отладки не придется постоянно перемещаться между окнами основной программы и отлаживаемого модуля.

Полностью отлаженный и протестированный модуль в виде tpu-файламожет быть распространен с приложением к немузаголовкаиинтерфейсногораздела (но не разделареализации!) исходного текста модуля в качестве инструкции по использованию с подробными комментариями. Обращаться к такому модулю в вызывающей программе можно указанием его имени в оператореUses:

Uses CRT, My_modul;

Взаимное использование модулей

Модули могут обращаться друг к другу косвенно или рекурсивно.

При косвенномиспользовании модулей один из них использует другой:

Unit A; Unit B;

Interface Interface

Uses B; .....

....... End.

End.

Пусть в головной программе используется только модуль A:

Uses CRT, A;

В этом случае нет необходимости указывать и модуль B:

Uses CRT, A, B;

При рекурсивномиспользовании модулей они взаимно обращаются друг к другу:

Unit A; Unit B;

Interface Interface

Uses B; Uses A;

....... .......

End. End.

Если какой-нибудь из них подключить к программе:

Uses CRT, A;

то будет зафиксирована ошибка:

Error 68: Circular Unit Reference (A)

Взаимное использование возможно, если модули подключить из раздела реализации:

Unit A; Unit B;

Interface Interface

....... .......

Implementation Implementation

Uses B; Uses A;

....... .......

End. End.

Особенности выполнения инициирующих разделов

Если в модуле имеется инициирующий раздел, то его операторы выполняются дооператоров программы, к которой данный модуль подключен. Если несколько модулей с инициирующими разделами:

Unit A; Unit B;

Interface Interface

Const x = 1; Const x = 2; x - глобальная

Implementation Implementation переменная

End. End.

подключены к программе:

Program Primer;

Uses WinCRT, A, B;

Begin

ClrScr;

WriteLn('x=', x);

End.

то они выполняются в порядке подключения, и одноименной переменной будет присвоено последнеезначение. На экран будет выведено:

x=2

Последним подключен модуль B, в котором глобальнаяx = 2.

Изменим порядок подключения:

Program Primer;

Uses WinCRT, B, A;

Begin

ClrScr;

WriteLn('x=', x);

End.

В этом случае на экране появится:

x=1

так как в модуле Aглобальнаяx = 1.

Если в программе необходим доступ ко всем переменным, в том числе и одноименным, из интерфейсов всех модулей, то указываются их составные имена, похожие на имена полей записей:

Program Primer;

Uses WinCRT, A, B;

Begin

ClrScr;

WriteLn('A.x=', A.x);

WriteLn('B.x=', B.x);

End.

На экран будет выведено:

A.x=1

B.x=2