Введение в объектно-ориентированное программирование на языке Object Pascal. Соколов Е.В. - 27 стр.

UptoLike

Составители: 

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