Доступ к объявленным в модуле объектам

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

Unit Cmplx;
Interface
Type
Complex = Record
Re: Real;
Im: Real;
End;
Procedure AddC (X, У: Complex; Var Z; Complex);
Procedure SubC (X, У: Complex; Var Z: Complex);
Procedure MulC (X, Y.: Complex; Var Z: Complex);
Procedure DivC (X, У: Complex; Var Z: Complex);

Const
С: Complex = (Re: 0.1; 1m: -1);

Implementation
Procedure Addc;
Begin
Z.Re:= X.Re + Y.Re;
Z.Im:= X.Im + Y.Im;
End {Addc};

Procedure Subc;
Begin
Z.Re:= X.Re - Y.Re;
Z.Im:= X.Im - Y.Im;
End {Subc};

Procedure Mulc;
Begin
Z.Re:= X.Re * Y.Re - X.Im * Y.Im;
Z.Im:= X.Re * Y.Im + X.Im * Y.Re;
End {Mulc};

Procedure DivC;
Var
ZZ: Real;
Begin
ZZ:= Sqr(Y.Re) + Sqr(Y.Im);
Z.Re:= (X.Re * Y.Re + X.Im * Y.Im) / ZZ;
Z.Im:= (X.Re * Y.Im - X.Im * Y.Re) / ZZ;
End;
End.

Текст этого модуля нужно поместить в файл CMPLX.PAS. Теперь можно написать программу, приведенную в примере:

Program TestOfComplex;
Uses Cmplx;
Var
A, B, С: Complex;
Begin
A.Re:= 1;
A.Im:= 1;
B.Re:= 1;
B.Im:= 2;
AddC (A, B, C);
WriteLn (‘Сложение: ‘, C.Re:5:1, C.Im:5:1,’i’);
SubC (A, B, C);
WriteLn (‘Вычитание: ‘, C.Re:5:1, C.Im:5:1,’i’);
MulC (A, B, C);
WriteLn ('Умножение: ‘, C.Re:5:1, C.Im:5:1,’i’);
DivC (A, B, C);
WriteLn ('Деление: ', C.Re:5:1, C.Im:5:1,’i’);
End.

Как видим, программе стали доступны все объекты, объявленные в интерфейсной части. При необходимости мы можем переопределить любой из этих объектов, как это произошло, например, с объявленной в модуле типизированной константой С. Переопределение объекта означает, что вновь объявленный объект "закрывает" ранее определенный в блоке одноименный объект. При необходимости мы можем получить доступ к "закрытому" объекту. Для этого нужно перед именем объекта поставить имя модуля и точку. Так, оператор
WriteLn(Cmplx.C.Re:5:1, Cmplx.C.Im:5:1,’i’);
выведет на экран содержимое "закрытой" типизированной константы из примера.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: