ВУЗ:
Составители:
Рубрика:
73
Plus: function(n1: PNumber; n2: PNumber): PNumber;
Minus: function(n1: PNumber; n2: PNumber): PNumber;
Dot: function(n1: PNumber; n2: PNumber): PNumber;
Slash: function(n1: PNumber; n2: PNumber): PNumber;
Add: procedure(var n1: PNumber; n2: PNumber);
Subtract: procedure(var n1: PNumber; n2: PNumber);
MultiplyBy: procedure(var n1: PNumber; n2: PNumber);
DivideBy: procedure(var n1: PNumber; n2: PNumber);
CreateAs: function(n, m: Integer): PRational; // добавленные
Normalize: procedure(var r: PRational); // методы
Reduce: procedure(var r: PRational); //
end;
Rational = packed record // тип Rational
VMT: PRationalVMT;
num: Integer; // добавленные
den: Integer; // поля
end;
var TypeRational: RationalVMT; // единственный экземпляр VMT
implementation
uses SysUtils; // модуль включает поддержку исключений
function Plus(n1: PNumber; n2: PNumber): PNumber;
var _self, res: PRational;
begin
_self:=PRational(n1);
if n2.VMT.TypeNameIs(n2.VMT, 'Rational') then begin
res:=PRational(TypeRational.Create);
res.num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num;
res.den:=_self.den*PRational(n2).den;
res.VMT.Normalize(res); res.VMT.Reduce(res);
result:=PNumber(res);
// по сравнению с предыдущей версией изменился синтаксис вызова
// функции TypeNameIs, конструктора, процедур Normalize и Reduce
end
else raise Exception.Create('Illegal operation');
end;
... // остальные операторы и процедуры Normalize и Reduce
// модифицируются аналогично функции Plus
function Create: PNumber;
var res: PRational;
begin
New(res);
res.VMT:=@TypeRational; // объекты ссылаются на VMT типа Rational
Plus: function(n1: PNumber; n2: PNumber): PNumber;
Minus: function(n1: PNumber; n2: PNumber): PNumber;
Dot: function(n1: PNumber; n2: PNumber): PNumber;
Slash: function(n1: PNumber; n2: PNumber): PNumber;
Add: procedure(var n1: PNumber; n2: PNumber);
Subtract: procedure(var n1: PNumber; n2: PNumber);
MultiplyBy: procedure(var n1: PNumber; n2: PNumber);
DivideBy: procedure(var n1: PNumber; n2: PNumber);
CreateAs: function(n, m: Integer): PRational; // добавленные
Normalize: procedure(var r: PRational); // методы
Reduce: procedure(var r: PRational); //
end;
Rational = packed record // тип Rational
VMT: PRationalVMT;
num: Integer; // добавленные
den: Integer; // поля
end;
var TypeRational: RationalVMT; // единственный экземпляр VMT
implementation
uses SysUtils; // модуль включает поддержку исключений
function Plus(n1: PNumber; n2: PNumber): PNumber;
var _self, res: PRational;
begin
_self:=PRational(n1);
if n2.VMT.TypeNameIs(n2.VMT, 'Rational') then begin
res:=PRational(TypeRational.Create);
res.num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num;
res.den:=_self.den*PRational(n2).den;
res.VMT.Normalize(res); res.VMT.Reduce(res);
result:=PNumber(res);
// по сравнению с предыдущей версией изменился синтаксис вызова
// функции TypeNameIs, конструктора, процедур Normalize и Reduce
end
else raise Exception.Create('Illegal operation');
end;
... // остальные операторы и процедуры Normalize и Reduce
// модифицируются аналогично функции Plus
function Create: PNumber;
var res: PRational;
begin
New(res);
res.VMT:=@TypeRational; // объекты ссылаются на VMT типа Rational
73
Страницы
- « первая
- ‹ предыдущая
- …
- 71
- 72
- 73
- 74
- 75
- …
- следующая ›
- последняя »
