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

UptoLike

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

46
function IsEqual (v: DynamicRVector): Boolean;
procedure Add (v: DynamicRVector);
procedure Subtract(v: DynamicRVector);
procedure Assign (v: DynamicRVector);
function GetLength: Real;
function GetComp(i: Integer): Rational;
procedure SetComp(i: Integer; value: Rational);
function GetDim: Integer;
procedure SetDim(value: Integer);
function AsString: String;
constructor Create;
destructor Destroy; override;
end;
implementation
uses SysUtils;
// Здесь размещается реализация методов,
// приведенная в примерах 2.4.1 - 2.4.4.
end.
8. Теперь , создавая вектор , мы должны не только вызывать конс т-
руктор класса DynamicRVector, но и обязательно задавать его размер-
ность с помощью метода SetDim. Кроме того, необходимо следить за
тем , чтобы вектор , передаваемый в качестве параметра какому-либо м е -
тоду нашего класса, имел ту же размерность, что и вектор , для которого
данный метод вызван. Такова плата за универсальность решения.
Модифицированный соответствующим образом код программы с
дополнительной демонстрацией корректности работы процедуры SetDim
при уменьшении размерности содержит
Пример 2.4.6. Демонстрационная программа для класса DynamicRVector.
program TestDynamicRVector;
{$APPTYPE CONSOLE}
uses UnitDynamicRVector in 'UnitDynamicRVector.pas',
UnitRational in 'UnitRational.pas';
var v1, v2, v3, v4: DynamicRVector; r, p: Rational; i: Integer;
begin
v1:=DynamicRVector.Create; v2:=DynamicRVector.Create;
r:=Rational.Create;
v1.SetDim(9); // сначала создаются векторы различной размерности
for i:=1 to 9 do begin
r.SetNum(i); r.SetDen(i+1); v1.SetComp(i, r);
end;
  function        IsEqual      (v: DynamicRVector): Boolean;
  procedure       Add     (v: DynamicRVector);
  procedure       Subtract(v: DynamicRVector);
  procedure       Assign (v: DynamicRVector);
  function        GetLength: Real;
  function        GetComp(i: Integer): Rational;
  procedure       SetComp(i: Integer; value: Rational);
  function        GetDim: Integer;
  procedure       SetDim(value: Integer);
  function        AsString: String;
  constructor     Create;
  destructor      Destroy; override;
end;
implementation
uses SysUtils;
// Здесь размещается реализация методов,
// приведенная в примерах 2.4.1 - 2.4.4.
end.


         8. Теперь , с оз д ав ая в ектор, м ы д ол жны не тол ь ков ы з ы в ат ь конс т -
руктор кл ас с а DynamicRVector, но и обяз ат ел ь но з ад ав ат ь его раз м ер-
нос т ь с пом ощ ь ю м етод а SetDim. Кром е того, необход им о с л ед ит ь з а
т ем , чтобы в ектор, перед ав аем ы й в качес т в е парам ет ра каком у-л ибом е-
тод у нашегокл ас с а, им ел т у же раз м ернос т ь , чтои в ектор, д л я которого
д анны й м етод в ы з в ан. Т аков а пл ат а з а унив ерс ал ь нос т ь решения.
         М од ифиц иров анны й с оот в ет с т в ующ им образ ом код програм м ы с
д опол нит ел ь ной д ем онс т рац ией коррект нос т и работ ы проц ед уры SetDim
при ум ень шении раз м ернос т и с од ержит

Пример2.4.6. Дем онс т рац ионная програм м а д л я кл ас с а DynamicRVector.

program TestDynamicRVector;
{$APPTYPE CONSOLE}
uses UnitDynamicRVector in 'UnitDynamicRVector.pas',
     UnitRational in 'UnitRational.pas';
var v1, v2, v3, v4: DynamicRVector; r, p: Rational; i: Integer;
begin
  v1:=DynamicRVector.Create; v2:=DynamicRVector.Create;
  r:=Rational.Create;
  v1.SetDim(9); // сначала создаются векторы различной размерности
  for i:=1 to 9 do begin
    r.SetNum(i); r.SetDen(i+1); v1.SetComp(i, r);
  end;



                                           46