ВУЗ:
Составители:
Рубрика:
50
ного метода требует по крайней мере одного дополнительного обраще-
ния к памяти (чаще двух). Тем не менее, добавляемые к классу новые ме-
тоды рекомендуется объявлять виртуальными, если есть хоть небольшая
вероятность их переопределения в клас сах-наслед никах.
В заключение приведем еще один, чуть менее тривиальный, при-
мер функции для умножения двух матриц, объединив ее вместе с опре-
делениями константы n, типа Matrix и функции AddMatrix в отдельном
модуле UnitAlgorithms.
Пример 3.5. Модуль, содержащий обобщенные алгоритмы для работы с
матрицами.
unit UnitAlgorithms;
interface
uses UnitRational; // необходим здесь для определения типа Matrix
const n = 3;
type Matrix = array[1..n,1..n] of Rational;
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное в начале параграфа
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: Rational;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m2[k,j]); // функция Dot возвращает новый объект,
result[i,j].Add(p); // после добавления к элементу
p.Destroy; // матрицы result он больше не нужен
end;
end;
end;
end.
Функция MultiplyMatrix перемножает матрицы m1 и m2, последова-
тельно складывая произведения их элементов посредством мет ода Add.
ного м етод а т ребует по крайней м ере од ного д опол нит ел ь ного обраще-
ния к пам ят и (чаще д в ух). Т ем не м енее, д обав л яем ы е к кл ас с у нов ы е м е-
тод ы реком енд ует с я объяв л ят ь в иртуал ь ны м и, ес л и ес т ь хот ь небол ь ш ая
в ероят нос т ь ихпереопред ел ения в кл ас с ах-нас л ед никах.
В з акл ючение прив ед ем еще од ин, чут ь м енее т рив иал ь ны й, при-
м ер функции д л я ум ножения д в ухм ат риц, объед инив ее в м ес т е с опре-
д ел ениям и конс т ант ы n, т ипа Matrix и функции AddMatrix в отд ел ь ном
м од ул е UnitAlgorithms.
П р им ер 3.5. М од ул ь , с од ержащий обобщенны е ал горит м ы д л я работ ы с
м ат рицам и.
unit UnitAlgorithms;
interface
uses UnitRational; // необходим здесь для определения типа Matrix
const n = 3;
type Matrix = array[1..n,1..n] of Rational;
function AddMatrix(m1, m2: Matrix): Matrix;
function MultiplyMatrix(m1, m2: Matrix): Matrix;
implementation
function AddMatrix(m1, m2: Matrix): Matrix;
... // здесь находится тело функции, приведенное в начале параграфа
function MultiplyMatrix(m1, m2: Matrix): Matrix;
var i,j,k: Integer; p: Rational;
begin
for i:=1 to n do for j:=1 to n do begin
result[i,j]:=m1[i,1].Dot(m2[1,j]);
for k:=2 to n do begin
p:=m1[i,k].Dot(m2[k,j]); // функция Dot возвращает новый объект,
result[i,j].Add(p); // после добавления к элементу
p.Destroy; // матрицы result он больше не нужен
end;
end;
end;
end.
Ф ункция MultiplyMatrix перем ножает м ат рицы m1 и m2, пос л ед ов а-
т ел ь но с кл ад ы в ая произ в ед ения ихэл ем ентов пос ред с тв ом м етод а Add.
50
Страницы
- « первая
- ‹ предыдущая
- …
- 48
- 49
- 50
- 51
- 52
- …
- следующая ›
- последняя »
