
3.5 Модуль
Модуль это автономно компилируемая единица программы, включающая в себя различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции), и, возможно, некоторые исполняемые операторы инициирующей части. В модулях явным образом выделяется некоторая «видимая» интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант, переменных, заголовки глобальных процедур и функций. Тела процедур и функций располагается в исполняемой части модуля, которая может быть скрыта от пользователя.
Структура:
Unit <имя модуля>;
Interfase <интерфейсная часть>
Implementation <исполняемая часть>
Begin <инициирующая часть>
End.
Имя модуля служит для его связи с другими модулями и основной программой. Эта связь устанавливается с помощью ключевого слова
Uses <список модулей> с которыми устанавливается связь
Если Uses используется, то оно должно открывать раздел описаний основной программы.
Uses CTR, Craph, Clobal;
В интерфейсной части модуля содержится объявление всех глобальных объектов модуля (типов, констант и т.д.), которые должны стать доступными основной программе или другим модулям. При объявлении глобальных подпрограмм в интерфейсной части указывается только их заголовок.
Unit Cmplx;
Interface
Type
Complex=record
re,im:real;
end;
Procedure Add(x,y:complex; var z:complex);
Чтобы основной программе стал доступен тип Complex и процедура из модуля Cmplx, следует написать
Uses Cmplx;
Исполняемая часть содержит описания подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты – вспомогательные типы, константы, переменные и др., если они используются в инициирующей части.
Описанию подпрограммы, объявленной в интерфейсной части модуля, в исполняемой части должен предшествовать заголовок, в котором можно опускать список формальных переменных (тип результата для функции), т.к. они описаны в интерфейсной части.
Unit Cmplx;
Interface
Type
Complex=record
re,im:real;
end;
Procedure Add(x,y:complex; var z:complex);
Implementation
Procedure Add;
Begin
z.re:=x.re+y.re;
z.im:=x.im+y.im;
End;
End.
В инициирующей части размещаются исполняемые операторы, содержащие некоторый фрагмент программы. Эти операторы исполняются до передачи управления основной программе и обычно используются для подготовки ее работы.
После объявления Uses программе станут доступны все объекты объявленные в интерфейсной части модуля Cmplx.
Uses Cmplx;
Var
a,b,c:complex;
begin
a.re:=1; b.re:=1; a.im:=1; b.re:=1;
Add(a,b,c);
WriteLn(‘Сложение’, c.re,c.im);
End.
3.6 Директива компилятору по работе с файлами
С помощью директивы компилятора {$I-} отключается автоматический контроль ошибок ввода-вывода. Если этого не сделать, то отсутствие файла приведет к аварийному завершению работы. Если делается попытка инициировать чтение из несуществующего файла, возникает ошибка, которая может быть сообщена программе ненулевым значением встроенной функции IOResult.
Var
f:file of char;
begin
assign(f, ‘file.dat’);
{$I-} {Отключаем контроль ошибок ввода-вывода}
reset(f)
{$I+} {Включаем контроль ошибок ввода-вывода}
if IOResult<>0 then
… {Файл не существует}
else
… {Файл существует}
end.