ВУЗ:
Составители:
Рубрика:
46
Эта функция складывает матрицы m1 и m2, вызывая для каждого
элемента первой матрицы метод Plus и передавая ему в качестве аргу-
мента соответствующий элемент второй матрицы . В результате получа-
ется матрица, с одержащая ссылки на объекты, созданные в процессе
работы методов Plus.
Мы знаем , что хотя формально элементы матриц принадлежат
классу Rational, в действительности они могут содержать ссылки и на
объекты любого другого класса, производного от Rational, например,
PAryFraction. Если теперь при вызове метода Plus его версия также будет
выбираться исходя из реального, а не формального, типа элемента мат-
рицы , то мы получим обобщенный алгоритм: результатом сложения
обычных рациональных чисел будет рациональное число, p-ичных дро-
бей — p-ичная дробь и т . д .
Посмотрим , как именно обстоит дело.
Пример 3.4. Программа, демонстрирующая работу обобщенного алго-
ритма.
program TestAlgoritm;
{$APPTYPE CONSOLE}
uses
UnitRational, // необходим для объявления типа Matrix
UnitPAryFraction; // необходим для создания реальных объектов
const n = 3;
type Matrix = array[1..n,1..n] of Rational;
function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное выше
procedure WriteMatrix(m: Matrix);
var i,j:Integer;
begin
for i:=1 to n do begin
for j:=1 to n do begin
Write(m[i,j].GetNum,'/', m[i,j].GetDen);
if (m[i,j] is PAryFraction) then Write(' (PAryFraction), ')
else Write(' (Rational), ');
end; // вместе со значением каждого элемента выводится
WriteLn; // информация о его типе: Rational или PAryFraction
end;
WriteLn;
end;
Э т а функция с кл ад ы в ает м ат рицы m1 и m2, в ы з ы в ая д л я кажд ого
эл ем ент а перв ой м ат рицы м етод Plus и перед ав ая ем у в качес т в е аргу-
м ент а с оот в ет с т в ующий эл ем ент в торой м ат рицы . В рез ул ь т ат е пол уча-
ет с я м ат рица, с од ержащая с с ы л ки на объект ы , с оз д анны е в процес с е
работ ы м етод ов Plus.
М ы з наем , что хотя форм ал ь но эл ем ент ы м ат риц принад л ежат
кл ас с у Rational, в д ейс т в ит ел ь нос т и они м огут с од ержат ь с с ы л ки и на
объект ы л юбого д ругого кл ас с а, произ в од ного от Rational, наприм ер,
PAryFraction. Е с л и т еперь при в ы з ов е м етод а Plus егов ерс ия т акже буд ет
в ы бират ь с я ис ход я из реал ь ного, а не форм ал ь ного, т ипа эл ем ент а м ат -
рицы , то м ы пол учим обобщенны й ал горит м : рез ул ь т атом с л ожения
обы чны храционал ь ны хчис ел буд ет рационал ь ное чис л о, p-ичны хд ро-
бей — p-ичная д робь и т. д .
Пос м от рим , как им еннообс тоит д ел о.
Пример 3.4. Програм м а, д ем онс т рирующая работ у обобщенного ал го-
рит м а.
program TestAlgoritm;
{$APPTYPE CONSOLE}
uses
UnitRational, // необходим для объявления типа Matrix
UnitPAryFraction; // необходим для создания реальных объектов
const n = 3;
type Matrix = array[1..n,1..n] of Rational;
function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное выше
procedure WriteMatrix(m: Matrix);
var i,j:Integer;
begin
for i:=1 to n do begin
for j:=1 to n do begin
Write(m[i,j].GetNum,'/', m[i,j].GetDen);
if (m[i,j] is PAryFraction) then Write(' (PAryFraction), ')
else Write(' (Rational), ');
end; // вместе со значением каждого элемента выводится
WriteLn; // информация о его типе: Rational или PAryFraction
end;
WriteLn;
end;
46
Страницы
- « первая
- ‹ предыдущая
- …
- 44
- 45
- 46
- 47
- 48
- …
- следующая ›
- последняя »
