ВУЗ:
Составители:
Рубрика:
43
Во-вторых, методы, оперирующие двумя векторами (Plus, Minus,
Add, Subtract, ScalarProduct, Assign), с содержательной точки зрения м о-
гут применяться лишь к векторам одинаковой размерности. Поэтому к
ним следует добавить соответствующие проверки, возбуждающие при
необходимости исключение. Особые правила нужны лишь для метода
IsEqual, где неравенство размерностей допустимо и просто означает не-
равенство векторов .
Заметим также, что методам Plus и Minus необходима возмож-
ность создавать «пустой» вектор (т. е. без объектов - ком понент) заданной
размерности. Ранее для этой цели нами был введен закрытый конструк-
тор CreateEmpty. Модифицируем его, добавив к заголовку один пара-
метр целого типа и изменив реализацию соответствующим обр а зом .
Результат всех исправлений содержит
Пример 2.4.4. Реализац ия методов класса DynamicRVector.
function DynamicRVector.Plus(v: DynamicRVector): DynamicRVector;
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then begin
result:=DynamicRVector.CreateEmpty(Length(self.comp));
for i:=0 to Length(self.comp)-1 do
result.comp[i]:=self.comp[i].Plus(v.comp[i]) as Rational;
end
else raise Exception.Create('Invalid Operation');
end;
function DynamicRVector.Minus(v: DynamicRVector): DynamicRVector;
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then begin
result:=DynamicRVector.CreateEmpty(Length(self.comp));
for i:=0 to Length(self.comp)-1 do
result.comp[i]:=self.comp[i].Minus(v.comp[i]) as Rational;
end
else raise Exception.Create('Invalid Operation');
end;
procedure DynamicRVector.Add(v: DynamicRVector);
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then
for i:=0 to Length(self.comp)-1 do self.comp[i].Add(v.comp[i])
else raise Exception.Create('Invalid Operation');
end;
Во-в торы х, м етод ы , оперирующ ие д в ум я в екторам и (Plus, Minus,
Add, Subtract, ScalarProduct, Assign), с с од ержат ел ь ной т очки з рения м о-
гут прим енят ь с я л ишь к в екторам од инаков ой раз м ернос т и. Поэтом у к
ним с л ед ует д обав ит ь с оот в ет с т в ующ ие пров ерки, в оз бужд ающ ие при
необход им ос т и ис кл ючение. О с обы е прав ил а нужны л ишь д л я м етод а
IsEqual, гд е нерав енс т в ораз м ернос т ей д опус т им ои прос тооз начает не-
рав енс т в ов екторов .
Зам ет им т акже, что м етод ам Plus и Minus необход им а в оз м ож-
нос т ь с оз д ав ат ь «пус той» в ектор (т. е. без объектов -ком понент ) з ад анной
раз м ернос т и. Ранее д л я этой ц ел и нам и бы л в в ед ен з акры т ы й конс т рук-
тор CreateEmpty. М од ифиц ируем его, д обав ив к з агол ов ку од ин пара-
м ет р ц ел огот ипа и из м енив реал из ац ию с оот в ет с т в ующ им образ ом .
Рез ул ьт ат в с ех ис прав л ений с од ержит
Пример2.4.4. Реал из ац ия м етод ов кл ас с а DynamicRVector.
function DynamicRVector.Plus(v: DynamicRVector): DynamicRVector;
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then begin
result:=DynamicRVector.CreateEmpty(Length(self.comp));
for i:=0 to Length(self.comp)-1 do
result.comp[i]:=self.comp[i].Plus(v.comp[i]) as Rational;
end
else raise Exception.Create('Invalid Operation');
end;
function DynamicRVector.Minus(v: DynamicRVector): DynamicRVector;
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then begin
result:=DynamicRVector.CreateEmpty(Length(self.comp));
for i:=0 to Length(self.comp)-1 do
result.comp[i]:=self.comp[i].Minus(v.comp[i]) as Rational;
end
else raise Exception.Create('Invalid Operation');
end;
procedure DynamicRVector.Add(v: DynamicRVector);
var i: Integer;
begin
if Length(self.comp)=Length(v.comp) then
for i:=0 to Length(self.comp)-1 do self.comp[i].Add(v.comp[i])
else raise Exception.Create('Invalid Operation');
end;
43
Страницы
- « первая
- ‹ предыдущая
- …
- 41
- 42
- 43
- 44
- 45
- …
- следующая ›
- последняя »
