Учебник Turbo Pascal. Введение - Модули

ОГЛАВЛЕНИЕ

Модули

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

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

sinh(x) = (ex-e-x)/2,

cosh(x) = (ex+e-x)/2,

tanh(x) = sinh(x)/cosh(jc).

Гиперболических функций нет в числе встроенных функций языка Паскаль, но эти функции достаточно часто появляются в прикладных задачах, и поэтому имеет смысл включить их в состав библиотечного модуля. Доступ к функциям из этого модуля обеспечивает оператор использования uses, в котором указывается имя модуля. Итак, сам модуль выглядит следующим образом.

Листинг 1.15. Модуль с гиперболическими функциями

{$N+}
unit hyp_fun;

interface

type
    Float = Extended;

function sinh(x: Float): Float;
function cosh(x: Float): Float;
function tanh(x: Float): Float;

implementation

var
    t: Float;

function sinh(x: Float): Float;
begin
    t := Exp(x);
    sinh := 0.5 * (t - 1.0/t);
end;

function cosh(x: Float): Float;
begin
    t := Exp(x);
    cosh := 0.5 * (t + 1.0/t);
end;

function tanh(x: Float): Float;
begin
    t := Exp(2.0 * x);
    tanh := (t - 1.0) / (t + 1.0);
end;

end.

Зарезервированные слова interface и implementation здесь играют важную роль. Каждый модуль имеет части (секции), озаглавленные этими словами. Секция interface (она называется интерфейсной секцией) содержит описания констант, типов, переменных и процедур, доступных из вызывающей программы или модуля. Секция implementation (секция реализации) содержит исходный код подпрограмм. Она может также содержать локальные описания, такие как var t: Real; из нашего примера.

Каждый модуль начинается с зарезервированного слова unit и заканчивается словом end, за которым следует точка. Для этого end не требуется соответствующего слова begin, хотя можно и поставить его непосредственно перед end. Оператор type в начале нашего модуля определяет тип Float, который в данном случае эквивалентен типу Extended. Указав справа от знака равенства любой другой вещественный тип, можно изменить точность вычисления гиперболических функций.

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

Листинг 1.16. Пример использования модуля hyp_fun

{$N+}
program testhyperbolic_funs;
uses
    CRT, hyp_fun;
begin
    ClrScr;
    WriteLn('sinh( 0.5) =',    sinh(0.5));
    WriteLn('cosh(-0.5) =',    cosh(-0.5));
    WriteLn('tanh( 1.5) =',    tanh(1.5));
    Write('Нажмите <Enter>');
    ReadLn;
end.

ПРИМЕЧАНИЕ Результатом компиляции модуля xyz.pas с заголовком unit xyz будет файл xyz.tpu.