ВУЗ:
Составители:
Рубрика:
27
модуля UnitRational вызовами методов класса Rational. Кроме того, необ-
ходимо исключить непосредственное обращение к полям num и den в
м етодах ScalarProduct и GetLength. В первом из них переменная result
должна быть явно размещена в памяти путем вызова конструктора, ко-
торый и выполнит ее инициализацию нулем . Во втором можно воспол ь -
зоваться методами GetNum/GetDen.
Отметим еще, что методы Plus и Minus класса Rational формально
возвращают ссылку на объект кл асса Number (реально адресующую объ -
ект класса Rational или производного от него) . Поэтому, присваивая ее
элементу массива comp, мы должны выполнить приведение типа по-
средством оператора as.
Результат описанных преобразов а ний содержит
Пример 2.3.1. Первая реализация методов класса RVector.
function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
for i:=1 to Dim do
result.comp[i]:=self.comp[i].Plus(v.comp[i]) as Rational;
end;
function RVector.Minus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
for i:=1 to Dim do
result.comp[i]:=self.comp[i].Minus(v.comp[i]) as Rational;
end;
procedure RVector.Add(v: RVector);
var i: Integer;
begin for i:=1 to Dim do self.comp[i].Add(v.comp[i]); end;
procedure RVector.Subtract(v: RVector);
var i: Integer;
begin for i:=1 to Dim do self.comp[i].Subtract(v.comp[i]); end;
function RVector.ScalarProduct(v: RVector): Rational;
var i: Integer;
begin
result:=Rational.Create;
for i:=1 to Dim do result.Add(self.comp[i].Dot(v.comp[i]));
end;
function RVector.GetLength: Real;
var i: Integer;
м од ул я UnitRational в ы з ов ам и м етод ов кл ас с а Rational. Кром е того, необ-
ход им о ис кл ючит ь непос ред с т в енное обращ ение к пол ям num и den в
м етод ах ScalarProduct и GetLength. В перв ом из них перем енная result
д ол жна бы т ь яв но раз м ещ ена в пам ят и пут ем в ы з ов а конс т руктора, ко-
торы й и в ы пол нит ее иниц иал из ац ию нул ем . Вов тором м ожнов ос пол ь -
з ов ат ь с я м етод ам и GetNum/GetDen.
О т м ет им ещ е, чтом етод ы Plus и Minus кл ас с а Rational форм ал ь но
в оз в ращ ают с с ы л ку на объект кл ас с а Number (реал ь ноад рес ующ ую объ-
ект кл ас с а Rational ил и произ в од ного от него). Поэтом у, прис в аив ая ее
эл ем ент у м ас с ив а comp, м ы д ол жны в ы пол нит ь прив ед ение т ипа по-
с ред с т в ом оператора as.
Рез ул ьт ат опис анны х преобраз ов аний с од ержит
Пример2.3.1. Перв ая реал из ац ия м етод ов кл ас с а RVector.
function RVector.Plus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
for i:=1 to Dim do
result.comp[i]:=self.comp[i].Plus(v.comp[i]) as Rational;
end;
function RVector.Minus(v: RVector): RVector;
var i: Integer;
begin
result:=RVector.Create;
for i:=1 to Dim do
result.comp[i]:=self.comp[i].Minus(v.comp[i]) as Rational;
end;
procedure RVector.Add(v: RVector);
var i: Integer;
begin for i:=1 to Dim do self.comp[i].Add(v.comp[i]); end;
procedure RVector.Subtract(v: RVector);
var i: Integer;
begin for i:=1 to Dim do self.comp[i].Subtract(v.comp[i]); end;
function RVector.ScalarProduct(v: RVector): Rational;
var i: Integer;
begin
result:=Rational.Create;
for i:=1 to Dim do result.Add(self.comp[i].Dot(v.comp[i]));
end;
function RVector.GetLength: Real;
var i: Integer;
27
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »
