Какую функцию выполняет оператор ** - Free Pascal
Формулировка задачи:
Наткнулся на оператор ** в статье про арифметические операции. Вот что там написано:
To exponentiate two types, the ** exponentiation operator must be overloaded.
Как я понял это что-то вроде операции возведения в степень, но вопрос в том, как ее использовать. Пробовал записывать его между двумя операндами, но компилятор ругается на типы переменных.
Что все-таки делает этот оператор и где его можно использовать?
Решение задачи: «Какую функцию выполняет оператор **»
textual
Листинг программы
- {$mode objfpc}
- const
- size = 4;
- type
- TMatrix = array[1 .. size, 1 .. size] of double;
- operator * (const a, b: TMatrix) m: TMatrix;
- var i, j, k: integer;
- begin
- for i := 1 to size do
- for j := 1 to size do begin
- m[i, j] := 0;
- for k := 1 to size do
- m[i, j] := m[i, j] + a[i, k] * b[k, j]
- end;
- end;
- operator * (const a: TMatrix; const f: double) m: TMatrix;
- var i, j: integer;
- begin
- for i := 1 to size do
- for j := 1 to size do
- m[i, j] := f * a[i, j]
- end;
- operator + (const a, b: TMatrix) m: TMatrix;
- var i, j: integer;
- begin
- for i := 1 to size do
- for j := 1 to size do
- m[i, j] := a[i, j] + b[i, j]
- end;
- { Возведение матрицы в степень }
- operator ** (const a: TMatrix; const pow: integer) m: TMatrix;
- var i, j: Integer;
- begin
- if pow = 0 then begin
- for i := 1 to size do
- for j := 1 to size do
- m[i, j] := Byte(i = j);
- exit
- end;
- m := a;
- for i := 1 to pred(pow) do
- m := m * a;
- end;
- procedure matrixPrint(a: TMatrix);
- var i, j: integer;
- begin
- for i := 1 to size do begin
- for j := 1 to size do
- write(a[i, j]:9:2);
- writeln
- end
- end;
- const
- n = 3;
- p: array[1 .. n] of double = (1.0, -2.0, 3.0);
- const
- a: TMatrix = (
- (10, 11, 14, 16),
- (12, 17, 10, 16),
- ( 8, 12, 12, 7),
- ( 8, 5, 17, 1)
- );
- var
- Res: TMatrix;
- i: Integer;
- begin
- matrixPrint(a);
- for i := 1 to n do
- res := res + (a ** (n - i)) * p[i]; { Все вычисление многочлена матрицы записывается в одну строчку }
- matrixPrint(Res)
- end.
Объяснение кода листинга программы
В данном коде на языке Free Pascal реализована работа с матрицами.
- В первой части кода (с 1 по 12 строчку) определены операции над матрицами: умножение матрицы на число, сложение двух матриц, а также возведение матрицы в степень.
- Далее (с 13 по 20 строчку) определена функция печати матрицы, которая выводит значения матрицы на экран.
- В конце кода (с 21 по 30 строчку) определён многочлен, вычисление которого производится с помощью возведения матрицы в степень и добавления произведений элементов матрицы и коэффициентов многочлена. Результат вычисления выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д