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

60. Общая структура модуля: unit ModuleName;  {заголовок модуля}

interface  {раздел интерфейса} uses   {используемые в интерфейсе модули} const type          {экспортируемые (глобальные) описания} var function . . .                      {заголовки экспортируемых подпрограмм} procedure

implementation   {раздел реализации} uses   {используемые при реализации модули} label const         {внутренние (локальные) описания} type var function . . .                      {подпрограммы, указанные в интерфейсе} procedure function . . .                      { внутренние (локальные) подпрограммы} procedure

[begin]   {раздел инициализации [необязателен]} {инициирующая часть} end.  {ModuleName} Заголовок модуля состоит из ключевого слова unit (программная единица) и имени модуля. Имя модуля должно быть правильным идентификатором (в смысле Паскаля) и совпадать с именем дискового файла, содержащего данный модуль. Например, модуль с заголовком unit Math_Lib содержит исходный текст в файле Math_Lib.pas, а откомпилированный код – в файле Math_Lib.tpu.

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

unit Math_Lib; interface function Max (X, Y: Real): Real; function Min (X, Y: Real): Real; implementation . . .

Если теперь в использующей программе написать uses Math_Lib; то в ней станут доступны две функции – Max и Min из модуля Math_Lib.

Исполняемая часть (implementation) в основном содержит описания, т.е. заголовки и тела подпрограмм, объявленных в секции интерфейса. Кроме того, в ней описываются локальные для модуля объекты (константы, типы, переменные и подпрограммы). Если подпрограмма объявлена в интерфейсе, то в ее заголовке в секции реализации можно опускать список формальных параметров и тип функции, однако это снижает понятность программы.

Пример: unit Math_Lib; . . . implementation

function Max (X, Y: Real): Real; begin if  X > Y then Max := X else Max := Y; end; {Max} . . .

В инициирующей части помещаются операторы, которые исполняются до передачи управления основной программе. Обычно они используются для подготовки модуля к работе. Например, в этой секции могут инициироваться переменные, открываться нужные файлы, устанавливаться связи с другими ПК и т.д. Если такая подготовка не нужна, то инициирующая часть вместе с начинающим ее словом begin опускается.

В качестве примера ниже приводится текст модуля, содержащего четыре часто используемые функции: min (x, y), max (x, y), xn и xy, которые отсутствуют в стандартном модуле System (в Object Pascal системы Delphi эти функции есть).

unit Math_Lib; {Библиотека математических функций}

interface  {Секция интерфейса}

{Заголовки подпрограмм} function Max (X, Y: Real): Real; {Максимальное из X и Y} function Min (X, Y: Real): Real; {Минимальное из X и Y} function IntPower (X: Real; N: Integer): Real; {Целая степень} function Power (X, Y: Real): Real;           {Дробная степень}

implementation  {Секция реализации}

{Тела подпрограмм} function Max (X, Y: Real): Real; begin if X > Y then Max := X else Max := Y; end;

function Min (X, Y: Real): Real; begin if X > Y then Min := Y else Min := X; end;

function IntPower (X: Real; N: Integer): Real; {X в степени N} var i : Word; P : Real; begin P := 1; for i := 1 to Abs (N) do P := P * X; if N < 0 then P := 1 / P; IntPower := P; end;

function Power (X, Y: Real): Real;  {X в степени Y} begin if X > 0 then Power := Exp (Y * Ln (X)) else if Y = 0 then Power := 1 else if Y = 1 then Power := X else Power :=0; end; end.{Math_Lib} Для демонстрации использования модуля Math_Lib предлагается программа, в которой вводятся вещественные числа X, Y и целое число N, после чего вычисляются четыре вышеперечисленные функции.

program Mat_Demo; {Демонстрация использования модулей} uses CRT, Math_Lib; var X, Y : Real; N : Integer; begin ClrScr; Write ('  Дробное основание степени  X = '); Readln (X); Write (' Дробный показатель степени  Y = '); Readln (Y); Write ('   Целый показатель степени  N = '); Readln (N); Writeln; Writeln (' Max (', X:4:2, ', ', Y:4:2, ') = ', Max (X, Y):5:2); Writeln; Writeln (' Min (', X:4:2, ', ', Y:4:2, ') = ', Min (X, Y):5:2); Writeln; Writeln (' IntPower (', X:4:2, ', ', N, ') = ', IntPower (X, N):8:6); Writeln; Writeln (' Power (', X:4:2, ', ', Y:4:2, ') = ', Power (X, Y):4:2); end.

59. Модули

Модуль - это подключаемая к программе библиотека ресурсов. Он может содержать описания типов, констант, переменных и подпрограмм. В модуль обычно объединяют связанные между собой ресурсы: например, в составе оболочки есть модуль Graph для работы с экраном в графическом режиме.

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

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

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

Описание модулей

Исходный текст каждого модуля хранится в отдельном файле с расширением .pas. Общая структура модуля:

unit имя;      { заголовок модуля }

interface      { интерфейсная секция модуля }

{ описание глобальных элементов модуля (видимых извне) }

implementation { секция реализации модуля }

{ описание локальных (внутренних) элементов модуля }

begin          { секция инициализации }

{ может отсутствовать }

end.

ВНИМАНИЕ Имя файла, в котором хранится модуль, должно совпадать с именем, заданным после ключевого слова unit.

Модуль может использовать другие модули, для этого их надо перечислить в операторе uses, который может находиться только непосредственно после ключевых слов interface илиimplementation.

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

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

Кроме того, в этой секции можно определять константы, типы данных, переменные и внутренние подпрограммы.

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

Для сохранения скомпилированного модуля на диске требуется установить значение пункта Destination меню Compile в значение Disk. Компилятор создаст файл с расширением .tpu.

Пример №1.

Пример описания модуля. Оформим в виде модуля подпрограмму вычисления среднего арифметического значения элементов массива.

unit Average;

interface

const n = 10;

type mas = array[1 .. n] of real;

procedure average(x : mas; var av : real);

implementation

procedure average(x : mas; var av : real);

var i : integer;

begin

av := 0;

for i := 1 to n do av := av + x[i];

av := av / n;

end;

end.

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

Для использования в программе величин, описанных в интерфейсной части модуля, имя модуля указывается в разделе uses. Можно записать несколько имен модулей через запятую, например:

program example;

uses Average, Graph, Crt;

Поиск модулей выполняется сначала в библиотеке исполняющей системы, затем в текущем каталоге, а после этого - в каталогах, заданных в диалоговом окне Options/Directories.