ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »