ВУЗ:
Составители:
Рубрика:
27
raise Exception.Create('Illegal value of denominator');
end;
procedure Rational.Normalize;
begin
if self.den<0 then begin
self.num:=-self.num; self.den:=-self.den;
end;
end;
procedure Rational.Reduce;
var a,b:Integer;
begin
a:=Abs(self.num); b:=self.den;
while a<>0 do
if a>=b then a:=a-b else b:=b-a;
self.num:=self.num div b; self.den:=self.den div b;
end;
procedure Rational.DivideBy(r:Rational);
var _num,_den:Integer;
begin
if r.num=0 then raise Exception.Create('Division by zero');
_num:=self.num*r.den;
_den:=self.den*r.num;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
end;
function Rational.Slash(r:Rational): Rational;
var res:Rational;
begin
if r.num=0 then raise Exception.Create('Division by zero');
res:=Rational.Create; // переменная res размещается в памяти
res.num:=self.num*r.den; // теперь возможны
res.den:=self.den*r.num; // обращения к ее полям
res.Normalize; res.Reduce; // и методам
result:=res; // адрес res возвращается в качестве значения функции
end;
{ Удалять переменную res при выходе из функции нельзя,
так как она содержит результат вычисления. }
... // реализация остальных методов производится аналогично
end.
raise Exception.Create('Illegal value of denominator');
end;
procedure Rational.Normalize;
begin
if self.den<0 then begin
self.num:=-self.num; self.den:=-self.den;
end;
end;
procedure Rational.Reduce;
var a,b:Integer;
begin
a:=Abs(self.num); b:=self.den;
while a<>0 do
if a>=b then a:=a-b else b:=b-a;
self.num:=self.num div b; self.den:=self.den div b;
end;
procedure Rational.DivideBy(r:Rational);
var _num,_den:Integer;
begin
if r.num=0 then raise Exception.Create('Division by zero');
_num:=self.num*r.den;
_den:=self.den*r.num;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
end;
function Rational.Slash(r:Rational): Rational;
var res:Rational;
begin
if r.num=0 then raise Exception.Create('Division by zero');
res:=Rational.Create; // переменная res размещается в памяти
res.num:=self.num*r.den; // теперь возможны
res.den:=self.den*r.num; // обращения к ее полям
res.Normalize; res.Reduce; // и методам
result:=res; // адрес res возвращается в качестве значения функции
end;
{ Удалять переменную res при выходе из функции нельзя,
так как она содержит результат вычисления. }
... // реализация остальных методов производится аналогично
end.
27
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »
