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

UptoLike

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

71
var a,b:Integer;
begin // используется алгоритм Евклида поиска НОД
a:=Abs(r.num); b:=r.den;
while a<>0 do
if a>=b then a:=a-b else b:=b-a;
// по завершении цикла b=НОД(r.num,r.den)
r.num:=r.num div b; r.den:=r.den div b;
end;
{ Определения подпрограмм, объявленных в разделе интерфейса. }
function Plus(r1,r2:Rational): Rational;
var res: Rational;
begin
res.num:=r1.num*r2.den+r1.den*r2.num;
res.den:=r1.den*r2.den;
Normalize(res); Reduce(res);
result:=res;
end;
function Minus(r1,r2:Rational): Rational;
var res: Rational;
begin
res.num:=r1.num*r2.den-r1.den*r2.num;
res.den:=r1.den*r2.den;
Normalize(res); Reduce(res);
result:=res;
end;
function Dot(r1,r2:Rational): Rational;
var res: Rational;
begin
res.num:=r1.num*r2.num;
res.den:=r1.den*r2.den;
Normalize(res); Reduce(res);
result:=res;
end;
function Slash(r1,r2:Rational): Rational;
var res: Rational;
begin
if r2.num=0 then raise Exception.Create('Division by zero');
{ Если числитель второго аргумента равен нулю, возбуждается
исключение с сообщением "Деление на ноль". }
res.num:=r1.num*r2.den;
res.den:=r1.den*r2.num;
Normalize(res); Reduce(res);
result:=res;
end;
var a,b:Integer;
begin // используется алгоритм Евклида поиска НОД
  a:=Abs(r.num); b:=r.den;
  while a<>0 do
     if a>=b then a:=a-b else b:=b-a;
     // по завершении цикла b=НОД(r.num,r.den)
  r.num:=r.num div b; r.den:=r.den div b;
end;
{ Определения подпрограмм, объявленных в разделе интерфейса. }
function Plus(r1,r2:Rational): Rational;
var res: Rational;
begin
  res.num:=r1.num*r2.den+r1.den*r2.num;
  res.den:=r1.den*r2.den;
  Normalize(res); Reduce(res);
  result:=res;
end;
function Minus(r1,r2:Rational): Rational;
var res: Rational;
begin
  res.num:=r1.num*r2.den-r1.den*r2.num;
  res.den:=r1.den*r2.den;
  Normalize(res); Reduce(res);
  result:=res;
end;
function Dot(r1,r2:Rational): Rational;
var res: Rational;
begin
  res.num:=r1.num*r2.num;
  res.den:=r1.den*r2.den;
  Normalize(res); Reduce(res);
  result:=res;
end;
function Slash(r1,r2:Rational): Rational;
var res: Rational;
begin
  if r2.num=0 then raise Exception.Create('Division by zero');
{ Если числитель второго аргумента равен нулю, возбуждается
  исключение с сообщением "Деление на ноль". }
  res.num:=r1.num*r2.den;
  res.den:=r1.den*r2.num;
  Normalize(res); Reduce(res);
  result:=res;
end;




                                 71