12.6.
ДОСТУП К ОБЪЯВЛЕННЫМ В МОДУЛЕ ОБЪЕКТАМ
Пусть, например, мы создаем модуль,
реализующий арифметику комплексных чисел (такая арифметика ни в стандартном
Паскале, ни в Object Pascal не предусмотрена, но в Delphi 6 введен пользовательский
вариант, который реализует действия над комплексными
Числами - см. п. 10.5 и модуль Source\Rtl\Common\VarCmplx.pas
Каталога размещения Delphi). Арифметика комплексных чисел реализуется четырьмя
функциями:
Unit
Cmplx;
//---------------------------
Interface
//---------------------------
type
Complex =
record
re,im: real
end; Function
AddC (x,y: Complex): Complex;
Function
SubC (x,y:
Complex): Complex;
Function
MuiC (x,y:
Complex): Complex;
Function
DivC (x,y:
Complex): Complex;
const
с : Complex = (re : 0.1;
im : -1);
//---------------------------
Implementation
//---------------------------
Function
AddC (x,y:
Complex): Complex;
//
Сложение комплексных
чисел
begin
Result.re := x.re + y.re;
Result.im := x.im + y.im
end;
//AddC
Function
SubC (x,y:
Complex): Complex;
//
Вычитание комплексных
чисел
begin
Result.re := x.re - y.re;
Result.im := x.im - y.im
end;
//SubC
Function
MulC (x,y:
Complex): Complex;
//
Умножение комплексных
чисел
begin
Result.re := x.re * y.re
- x.im * y.im;
Result.im := x.re * y.im
+ x.im * y.re
end;
//MulC
Function
DivC (x,y:
Complex): Complex;
//
Деление комплексных
чисел
var
z: Real;
begin
z := sqr(y.re) + sqr(y.im);
//
Защищаем программу
от краха в случае, когда z=0:
try-
Result, re
:= (x.re * у.re + x.im * y.im) / z;
Result.im := (x.re * y.im
- x.im * y.re) / z;
except
Result.re := l.le309;
Result.im := l.le309;
end
end
{Div.C};
end.
Чтобы создать такой модуль, следует
вызвать опцию File | New I unit[
В Delphi 1 для этого используется
опция
File | New | Unit, в версиях 2...5 - опция File |
New и выбор пиктограммы на закладке
New окна Репозитория.
]. Текст модуля следует сохранить в файле cmplx.pas:
имя файла должно совпадать с именем модуля - только в этом случае Delphi сможет
автоматически найти модуль и следить за его обновлением.
После создания модуля его имя нужно
упомянуть в предложении uses того модуля, в котором будут использоваться вновь
созданные подпрограммы, типы, константы (в нашем модуле - тип complex, подпрограммы
Addc, subc. Mule, Dive и константа с). Пусть, например, при каждом щелчке по
кнопке bbRun учебной программы создается пара случайных комплексных чисел, над
которыми осуществляются все четыре арифметических действия. Тогда обработчик
bbRunClick
мог бы быть таким:
implementation
uses
Cmplx;
{$R *.DFM}
procedure
Tform1.bbRunClick(Sender:
TObject);
var
x,y,z: Complex;
procedure
Output(Operation:
Char);
//Осуществляет нужное
действие и выводит результат в mmOutput
var
S:
String;
begin
case
Operation
of
'+': z
:=
AddC(x,y)
;
'-': z :=
SubC(x,y)
;
'*': z := MulC(x,y) ;
'/': z := DivC(x,y) ;
end;
S := '('+FormatFloat('+0.0000;-0.0000',x.re)+
FormatFloat('+O.OOOOj;-O.OOOOj',x.im)+')'
+0peration+
'('+
FormatFloat('+0.0000;-0.0000',у.re)+
FormatFloat('+0.OOOOj;-0.OOOOj',у.im)+'='+
FormatFloat('+0.0000;-0.0000',z.re)+
FormatFloat('+0.OOOOj;-0.OOOOj',x.im);
mmOutput.Lines.Add(S) ;
end;
//Output
begin
//bbRunClick
x.re := Random;
x.im
:=
Random;
y.re := Random;
y.im := Random;
Output('+');
Output('-');
Output ('*');
Output ('/');
mmOutput.Lines.Add('');
end
;
Обратите внимание на ссылку uses
cmpix в самом начале исполняемой части - именно она делает доступными обработчику
bbRunClick объекты модуля Cmplx. Эту ссылку можно вставить с помощью среды Delphi:
выберите опцию File | Use Unit и в появившемся окне щелкните по имени модуля
Сmplx.