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