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

UptoLike

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

38
if value=0 then raise Exception.Create('Ambiguous result');
{ Если value равно нулю, возбуждается исключение с сообщением
"Неоднозначный результат". }
v:=value;
while (v mod self.base)=0 do v:=v div self.base;
if (v=1) or (v=-1) then result:=true else result:=false;
{ Делим value на base до тех пор, пока это возможно. Если в
результате остается
±
1, значит value является степенью base. }
end;
function PAryFraction.GetBase: Integer;
begin result:=self.base; end;
procedure PAryFraction.SetBase(value: Integer);
begin
if (value<>self.base) then
if self.isPrime(value) then // value должно быть простым
begin self.base:=value; self.SetNum(0); self.SetDen(1); end
else // иначе возбуждается исключение с сообщением
// "Недопустимое значение основания"
raise Exception.Create('Illegal value of base');
end;
procedure PAryFraction.SetDen(value: Integer);
begin
if (value>0) and self.isPowerOfBase(value) then
inherited SetDen(value)
else
raise Exception.Create('Illegal value of denominator');
{ Если передаваемое значение положительно и является
степенью base, то можно изменить знаменатель, вызвав
старую версию метода SetDen. Иначе возбуждается исключение
с сообщением "Недопустимое значение знаменателя". }
end;
constructor PAryFraction.Create;
begin
inherited Create;
// старый конструктор инициализирует поля num и den
self.base:=2;
end;
    if value=0 then raise Exception.Create('Ambiguous result');

    { Если value равно нулю, возбуждается исключение с сообщением
      "Неоднозначный результат". }

    v:=value;
    while (v mod self.base)=0 do v:=v div self.base;
    if (v=1) or (v=-1) then result:=true else result:=false;

    { Делим value на base до тех пор, пока это возможно. Если в
      результате остается ±1, значит value является степенью base. }

  end;

function PAryFraction.GetBase: Integer;
  begin result:=self.base; end;

procedure PAryFraction.SetBase(value: Integer);
  begin
    if (value<>self.base) then
       if self.isPrime(value) then // value должно быть простым
         begin self.base:=value; self.SetNum(0); self.SetDen(1); end
       else // иначе возбуждается исключение с сообщением
            // "Недопустимое значение основания"
         raise Exception.Create('Illegal value of base');
  end;

procedure PAryFraction.SetDen(value: Integer);
  begin
    if (value>0) and self.isPowerOfBase(value) then
      inherited SetDen(value)
    else
      raise Exception.Create('Illegal value of denominator');

         { Если передаваемое значение положительно и является
           степенью base, то можно изменить знаменатель, вызвав
           старую версию метода SetDen. Иначе возбуждается исключение
           с сообщением "Недопустимое значение знаменателя". }

  end;

constructor PAryFraction.Create;
  begin
    inherited Create;
    // старый конструктор инициализирует поля num и den
    self.base:=2;
  end;



                                    38