ВУЗ:
Составители:
Рубрика:
64
if r.den<0 then begin
r.num:=-r.num; r.den:=-r.den;
end;
end;
function TypeNameIs(TypeName: String): Boolean;
begin
if (TypeName='Rational') or (TypeName='Number') then result:=true
else result:=false;
{ Поскольку тип Rational является производным от Number,
все его объекты принадлежат также и типу Number. Такое
определение функции соответствует поведению оператора is. }
end;
procedure Destroy(var n: PNumber);
var _self: PRational;
begin
_self:=PRational(n); // процедура Dispose определяет размер
Dispose(_self); // освобождаемой области памяти по
// формальному типу своего параметра
end;
procedure Add(var n1: PNumber; n2: PNumber);
var _num,_den: Integer; _self: PRational;
begin
_self:=PRational(n1); // понижение типа; при использовании
// объектной модели корректность обеспечивается компилятором
if n2.TypeNameIs('Rational') then begin
_num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num;
_den:=_self.den*PRational(n2).den;
_self.num:=_num; _self.den:=_den;
_self.Normalize(_self); _self.Reduce(_self);
end
else raise Exception.Create('Illegal operation');
end;
function Plus(n1: PNumber; n2: PNumber): PNumber;
var _self, res: PRational;
begin
_self:=PRational(n1);
if n2.TypeNameIs('Rational') then begin
res:=UnitRational.Create;
res.num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num;
res.den:=_self.den*PRational(n2).den;
res.Normalize(res); res.Reduce(res);
result:=PNumber(res); // повышение типа; при использовании
if r.den<0 then begin r.num:=-r.num; r.den:=-r.den; end; end; function TypeNameIs(TypeName: String): Boolean; begin if (TypeName='Rational') or (TypeName='Number') then result:=true else result:=false; { Поскольку тип Rational является производным от Number, все его объекты принадлежат также и типу Number. Такое определение функции соответствует поведению оператора is. } end; procedure Destroy(var n: PNumber); var _self: PRational; begin _self:=PRational(n); // процедура Dispose определяет размер Dispose(_self); // освобождаемой области памяти по // формальному типу своего параметра end; procedure Add(var n1: PNumber; n2: PNumber); var _num,_den: Integer; _self: PRational; begin _self:=PRational(n1); // понижение типа; при использовании // объектной модели корректность обеспечивается компилятором if n2.TypeNameIs('Rational') then begin _num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num; _den:=_self.den*PRational(n2).den; _self.num:=_num; _self.den:=_den; _self.Normalize(_self); _self.Reduce(_self); end else raise Exception.Create('Illegal operation'); end; function Plus(n1: PNumber; n2: PNumber): PNumber; var _self, res: PRational; begin _self:=PRational(n1); if n2.TypeNameIs('Rational') then begin res:=UnitRational.Create; res.num:=_self.num*PRational(n2).den+_self.den*PRational(n2).num; res.den:=_self.den*PRational(n2).den; res.Normalize(res); res.Reduce(res); result:=PNumber(res); // повышение типа; при использовании 64
Страницы
- « первая
- ‹ предыдущая
- …
- 62
- 63
- 64
- 65
- 66
- …
- следующая ›
- последняя »