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

UptoLike

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

9
// объявления подпрограмм
function Plus(r1,r2:Rational): Rational; // Плюс
function Minus(r1,r2:Rational): Rational; // Минус
function Dot(r1,r2:Rational): Rational; // Точка
function Slash(r1,r2:Rational): Rational; // Косая черта
procedure Add(var r1:Rational; r2:Rational); // Прибавить
procedure Subtract(var r1:Rational; r2:Rational); // Вычесть
procedure MultiplyBy(var r1:Rational; r2:Rational); // УмножитьНа
procedure DivideBy(var r1:Rational; r2:Rational); // РазделитьНа
{ Поскольку результат выполнения перечисленных выше процедур
сохраняется в первом аргументе, этот аргумент должен быть
передан по ссылке, а не по значению. }
implementation
uses SysUtils; // модуль включает поддержку исключений
procedure Normalize(var r:Rational);
{ Процедура приводит рациональное число r, передаваемое в качестве
параметра, к нормальной форме: числитель - целое число,
знаменатель - натуральное. }
begin
if r.den<0 then begin
r.num:=-r.num; r.den:=-r.den;
end;
end;
procedure Reduce(var r:Rational);
{ Процедура сокращает числитель и знаменатель числа r на их
наибольший общий делитель. }
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);
// объявления подпрограмм
function Plus(r1,r2:Rational): Rational;              //   Плюс
function Minus(r1,r2:Rational): Rational;             //   Минус
function Dot(r1,r2:Rational): Rational;               //   Точка
function Slash(r1,r2:Rational): Rational;             //   Косая черта
procedure Add(var r1:Rational; r2:Rational);          //   Прибавить
procedure Subtract(var r1:Rational; r2:Rational);     //   Вычесть
procedure MultiplyBy(var r1:Rational; r2:Rational);   //   УмножитьНа
procedure DivideBy(var r1:Rational; r2:Rational);     //   РазделитьНа

{ Поскольку результат выполнения перечисленных выше процедур
  сохраняется в первом аргументе, этот аргумент должен быть
  передан по ссылке, а не по значению. }

implementation
uses SysUtils; // модуль включает поддержку исключений

procedure Normalize(var r:Rational);

{ Процедура приводит рациональное число r, передаваемое в качестве
  параметра, к нормальной форме: числитель - целое число,
  знаменатель - натуральное. }

  begin
    if r.den<0 then begin
       r.num:=-r.num; r.den:=-r.den;
    end;
  end;

procedure Reduce(var r:Rational);

{ Процедура сокращает числитель и знаменатель числа r на их
  наибольший общий делитель. }

  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);


                                    9