ВУЗ:
Составители:
Рубрика:
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
