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

UptoLike

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

47
var m1,m2,m3: Matrix; i,j: Integer;
begin
for i:=1 to n do for j:=1 to n do begin
m1[i,j]:=PAryFraction.CreateAs(1,(2 shl i));
m2[i,j]:=PAryFraction.CreateAs(1,(2 shl j));
end;
{ Элементам матриц присваиваются ссылки на объекты
класса PAryFraction. }
m3:=AddMatrix(m1,m2); // вызывается реализация алгоритма сложения
WriteMatrix(m1); //
WriteMatrix(m2); // содержимое матриц выводится на экран
WriteMatrix(m3); //
for i:=1 to n do for j:=1 to n do begin
m1[i,j].Destroy; m2[i,j].Destroy; m3[i,j].Destroy;
end;
{ По окончании работы программы необходимо удалить как элементы
матриц m1 и m2, так и созданные в процессе работы методов Plus
элементы матрицы m3. }
ReadLn;
end.
Приведенная программа складывает две матрицы 2-ичных дро-
бей, с одержащие следующие значения:
111
444
111
888
111
161616
æö
ç÷
ç÷
ç÷
èø
и
111
4816
111
4816
111
4816
æö
ç÷
ç÷
ç÷
èø
(выражение 2 shl k осуществляет сдвиг битового представления числа 2
на k бит влево, что эквивалентно его умножению на 2
k
). Полученная в
результате матрица m3 определена корректно:
35
1
2816
33
1
8416
53
1
16168
æö
ç÷
ç÷
ç÷
èø
но, увы, все ее элементы принадлежат классу Rational, а не PAryFraction.
Т аким образом , в процессе работы функции AddMatrix реальный тип
объектов был проигнорирован и всюду использовалась версия метода
Plus из класса Rational.
var m1,m2,m3: Matrix; i,j: Integer;

begin
  for i:=1 to n do for j:=1 to n do begin
    m1[i,j]:=PAryFraction.CreateAs(1,(2 shl i));
    m2[i,j]:=PAryFraction.CreateAs(1,(2 shl j));
  end;

{ Элементам матриц присваиваются ссылки на объекты
  класса PAryFraction. }

  m3:=AddMatrix(m1,m2); // вызывается реализация алгоритма сложения
  WriteMatrix(m1); //
  WriteMatrix(m2); // содержимое матриц выводится на экран
  WriteMatrix(m3); //
  for i:=1 to n do for j:=1 to n do begin
    m1[i,j].Destroy; m2[i,j].Destroy; m3[i,j].Destroy;
  end;

{ По окончании работы программы необходимо удалить как элементы
  матриц m1 и m2, так и созданные в процессе работы методов Plus
  элементы матрицы m3. }

  ReadLn;
end.


        Прив ед енная програм м а с кл ад ы в ает д в е м ат рицы 2-ичны х д ро-
бей, с од ержащие с л ед ующие з начения:
                               æ 14 14 14 ö æ   1
                                                4
                                                     1
                                                     8
                                                          1 ö
                                                         16
                               ç1 1 1÷ ç        1    1    1 ÷
                               ç8 8 8÷ и ç      4    8   16 ÷
                               ç1 1 1÷ ç        1    1    1 ÷
                               è 16 16 16 ø è   4    8   16 ø

(в ы ражение 2 shl k ос ущес т в л яет с д в иг битов огопред с т ав л ения чис л а 2
на k бит в л ев о, что э кв ив ал ент ноего ум ножению на 2k ). Пол ученная в
рез ул ь т ат е м ат рица m3 опред ел ена коррект но:
                                     æ 12 83 165 ö
                                     ç3 1 3÷
                                     ç 8 4 16 ÷
                                     ç5 3 1÷
                                     è 16 16 8 ø
но, ув ы , в с е ее эл ем ент ы принад л ежат кл ас с у Rational, а не PAryFraction.
Т аким образ ом , в процес с е работ ы функции AddMatrix реал ь ны й т ип
объектов бы л проигнориров ан и в с юд у ис пол ь з ов ал ас ь в ерс ия м етод а
Plus из кл ас с а Rational.

                                         47