|
Доступ к объявленным в модуле объектам
Пусть, например, мы создаем
модуль, реализующий арифметику комплексных чисел (такая
арифметика ни в стандартном Паскале, ни в Турбо Паскале
не предусмотрена). К сожалению, в Турбо Паскале нельзя
использовать функции, значения которых имели бы структурированный
тип (запись, например), поэтому арифметика комплексных
чисел реализуется четырьмя процедурами:
UNIT Cmplx;
{---------------------}
INTERFACE
{---------------------}
type complex = record
re, im:real
end;
|
Procedure AddC
|
(x, у
|
: complex;
|
var z
|
: complex) ;
|
|
Procedure SubC
|
(x, у
|
: complex;
|
var z
|
: complex) ;
|
|
Procedure MulC
|
(x, у
|
: complex;
|
var z
|
: complex) ;
|
|
Procedure DivC
|
(x, у
|
: complex;
|
var z
|
: complex) ;
|
|
const
|
|
с : complex =
|
(re :
|
0.1; im :
|
-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*у.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 {DivC};
end.
Текст этого модуля следует поместить
в файл CMPLX.PAS. Вы можете его откомпилировать, создав
TPU-файл, после чего Вашей программе станут доступны
процедуры из новой библиотеки. Например, в следующей
программе (пример 9.1) осуществляются четыре арифметические
операции над парой комплексных чисел.
Пример 9.1
Uses Cmplx;
var
а, Ь, с : 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('Вычитание: 'с.re:5:1, с.im:5:1,'i');
MulC(a, b, c);
WriteLn('Умножение: 'c.re:5:1, c.im:5:l,'i')
;
DivC(a, b, c);
WriteLn('Деление: 'c.re:5:l, с.im:5:1,'i');
end.
После объявления Uses Cmplx программе
стали доступны все объекты, объявленные в интерфейсной
части модуля CMPLX. При необходимости можно переопределить
любой их этих объектов, как это произошло, например,
с объявленной в модуле типизированной константой С.
Переопределение объекта означает, что вновь объявленный
объект «закрывает» ранее определенный в модуле одноименный
объект. Чтобы получить доступ к «закрытому» объекту,
нужно воспользоваться составным именем: перед именем
объекта поставить имя модуля и точку. Например, оператор
WriteLn(cmplx.c.re:5:l, cmplx.с.im:5:1,'i');
выведет на экран содержимое «закрытой»
типизированной константы из предыдущего примера.
|