ВУЗ:
Составители:
Рубрика:
76
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;
// по завершении цикла b=НОД(r.num,r.den)
self.num:=self.num div b;
self.den:=self.den div b;
end;
procedure Rational.Add(n: Number);
var _num,_den: Integer;
begin
if n is Rational then begin
_num:=self.num*(n as Rational).den+self.den*(n as Rational).num;
_den:=self.den*(n as Rational).den;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
end
else raise Exception.Create('Invalid operation');
end;
procedure Rational.Subtract(n: Number);
var _num,_den: Integer;
begin
if n is Rational then begin
_num:=self.num*(n as Rational).den-self.den*(n as Rational).num;
_den:=self.den*(n as Rational).den;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
end
else raise Exception.Create('Invalid operation');
end;
procedure Rational.MultiplyBy(n: Number);
var _num,_den: Integer;
begin
if n is Rational then begin
_num:=self.num*(n as Rational).num;
_den:=self.den*(n as Rational).den;
self.num:=_num; self.den:=_den;
self.Normalize; self.Reduce;
end
else raise Exception.Create('Invalid operation');
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; // по завершении цикла b=НОД(r.num,r.den) self.num:=self.num div b; self.den:=self.den div b; end; procedure Rational.Add(n: Number); var _num,_den: Integer; begin if n is Rational then begin _num:=self.num*(n as Rational).den+self.den*(n as Rational).num; _den:=self.den*(n as Rational).den; self.num:=_num; self.den:=_den; self.Normalize; self.Reduce; end else raise Exception.Create('Invalid operation'); end; procedure Rational.Subtract(n: Number); var _num,_den: Integer; begin if n is Rational then begin _num:=self.num*(n as Rational).den-self.den*(n as Rational).num; _den:=self.den*(n as Rational).den; self.num:=_num; self.den:=_den; self.Normalize; self.Reduce; end else raise Exception.Create('Invalid operation'); end; procedure Rational.MultiplyBy(n: Number); var _num,_den: Integer; begin if n is Rational then begin _num:=self.num*(n as Rational).num; _den:=self.den*(n as Rational).den; self.num:=_num; self.den:=_den; self.Normalize; self.Reduce; end else raise Exception.Create('Invalid operation'); end; 76