Разработка классов на языке Object Pascal. Соколов Е.В. - 76 стр.

UptoLike

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

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