Учебник 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.