Квадратная матрица. Вычислить A^n, по алгоритму - Turbo Pascal
Формулировка задачи:
Помогите решить задачку. Дана квадратная матрица А порядка m и натуральное число n; требуется найти . Если n=2k, то , если n=2k+1, то . Для k использовать тот же алгоритм.
Решение задачи: «Квадратная матрица. Вычислить A^n, по алгоритму»
textual
Листинг программы
uses crt; const nmax=7; type matr=array[1..nmax,1..nmax] of real; var m:byte; {умножение матрицы на матрицу} procedure Umn(a1,a2:matr;var a3:matr); var k,j,i:byte; begin for k:=1 to m do for j:=1 to m do begin a3[k,j]:=0; for i:=1 to m do a3[k,j]:=a3[k,j]+a1[k,i]*a2[i,j]; end; end; {вывод на экран} procedure Vyvod(a:matr;s:string); var i,j:byte; begin writeln(s); for i:=1 to m do begin for j:=1 to m do write(a[i,j]:9:1); writeln; end; end; var a,a2,b,c:matr; n,i,j,k:byte; s:string; begin clrscr; randomize; repeat write('Размер матрицы от 2 до ',nmax,' m='); readln(m); until m in [2..nmax]; for i:=1 to m do for j:=1 to m do a[i,j]:=-2+5*random; repeat write('Введите натуральное число от 1 до 7 - степень матрицы n='); readln(n); until n in[1..7]; Vyvod(a,'Матрица A:'); if n=1 then Vyvod(a,'Матрица A^1:'){если n=1} else {иначе} begin Umn(a,a,a2);{получем матрицу A^2} if n=2 then Vyvod(a2,'Матрица A^2:'){если n=2, выводим} else{если больше} begin k:=n div 2;{определяем количество пар} c:=a2;{запоминаем матрицу A^2} for i:=1 to k-1 do{k-1 раз} begin Umn(c,a2,b);{умножаем A^2*A^2} c:=b;{запомним результат} end; if odd(n) then Umn(c,a,b);{если n нечетное, домножаем на А} str(n,s); Vyvod(b,'Матрица A^'+s+':'); end; end; readln end.
Объяснение кода листинга программы
- В начале программы подключается библиотека crt, которая содержит функции для работы с памятью и числами с плавающей точкой.
- Объявляются переменные nmax и matr, которые будут использоваться для создания и работы с матрицами.
- Переменная m инициализируется значением 1, так как предполагается, что матрица имеет размерность m x m.
- Создается тип matr, который представляет собой массив целых чисел.
- Создается переменная m, которая будет использоваться для итерации по матрице.
- Создается процедура Umn, которая реализует операцию умножения матрицы на матрицу. Она принимает три аргумента: a1, a2 и a3. Внутри процедуры происходит итерация по элементам матрицы и вычисление их произведения.
- Создается процедура Vyvod, которая выводит матрицу на экран. Она принимает один аргумент - матрицу. Внутри процедуры происходит итерация по элементам матрицы и вывод их на экран.
- Создается переменная a, которая будет использоваться для хранения матрицы.
- Создается переменная a2, которая будет использоваться для хранения матрицы, полученной в результате операции умножения.
- Создается переменная b, которая будет использоваться для хранения результата операции умножения.
- Создается переменная c, которая будет использоваться для хранения матрицы, полученной в результате операции умножения.
- Создается цикл repeat, который будет выполняться до тех пор, пока m не станет равным 1 или n не станет равным 1.
- Внутри цикла повторяется запрос размера матрицы и ввода значения n.
- Если n равно 1, то выводится матрица A.
- Если n больше 1, то вызывается процедура Umn, которая умножает матрицу A на матрицу a2. Результат сохраняется в переменной b.
- Если n нечетное, то вызывается процедура Umn, которая умножает матрицу A на матрицу a. Результат сохраняется в переменной b.
- Выводится матрица b.
- Завершается цикл repeat.
- Завершается программа.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д