Программа на языке Паскаль реализующая операции с матрицами.
TYPE PowerMatrix=1..10; { Максимальное возможное количествао строк и столбцов матрицы (размер несущего массива) } Element=integer; { Тип элементов матрицы } MatrixType=record { Матрица } M,N:PowerMatrix; { Фактическая размерность матрицы M - количество строк N - количестиво столбцов } Matrix:array [PowerMatrix,PowerMatrix] of element { Несущий массив } end; PROCEDURE InputMatrix(var Matrix:MatrixType); { Процедура ввода матрицы } Var i,j:PowerMatrix; { Счетчики строк и столбцов } Begin Write('Введите количество строк и столбцов матрицы '); { Вывод приглашения ввести размерность матрицы } with Matrix do begin ReadLn(M,N); { Ввод размерности матрицы } for i:=1 to M do { Цикл ввода строк матрицы } for j:=1 to N do { Цикл ввода элементов матрицы } begin { Write('Введите элемент [',i,',',j,'] '); { Вывод приглашения ввести элемент матрицы } { ReadLn(Matrix[i,j]); { Ввод элемента матрицы } Matrix[i,j]:=i*10+j end end End; PROCEDURE OutputMatrix (Matrix:MatrixType); { Процедура вывода матрицы } Var i,j:PowerMatrix; { Счетчики строк и столбцов } Begin with Matrix do for i:=1 to M do { Цикл вывода строк матрицы } begin for j:=1 to N do { Цикл вывода элементов матрицы } Write (Matrix[i,j]:10,' '); { Вывод элемента матрицы } WriteLn { Вывод конца строки } end End; PROCEDURE MultMatrix(A,B:MatrixType; var C:MatrixType); { Процедура умножения матриц } Var i,j,k:PowerMatrix; { Счетчики строк и столбцов } Begin C.N:=A.M; C.M:=B.N; { Определение размерности результирующей матрицы } for i:=1 to A.M do { Цикл определения строк результата } for j:=1 to B.N do { Цикл определение строки результата } begin C.Matrix[i,j]:=0; { Сброс значения элемента } for k:=1 to A.N do { Цикл набора значения элемента } C.Matrix[i,j]:=C.Matrix[i,j]+A.Matrix[i,k]*B.Matrix[k,j]; end End; PROCEDURE PowerOfMatrix(A:MatrixType; p:byte; var B:MatrixType); { Процедура возведения матрицы в степень } Var i,j:PowerMatrix; { Счетчики строк и столбцов } Begin if p=0 then begin B.M:=A.M; B.N:=A.N; { Определение размерности результирующей матрицы } { Формирование единичной матрицы (B=A^0): } for i:=1 to B.M do { Цикл заполнения строк } for j:=1 to B.N do { Цикл заполнения строки } if i=j { Диагональные элементы заполняются "1", остальные "0": } then B.Matrix[i,j]:=1 else B.Matrix[i,j]:=0 end else begin PowerOfMatrix(A,p-1,B); MultMatrix(A,B,B) end End; VAR A,B,C,R:MatrixType; { Матрицы } p:byte; { Степень } BEGIN WriteLn; { Пропуск строки } WriteLn(' ВВОД МАТРИЦЫ A:'); { Вывод подсказки } InputMatrix(A); { Ввод матрицы } WriteLn; { Пропуск строки } WriteLn(' Исходная матрица A: '); { Вывод заголовка } OutputMatrix(A); { Вывод матрицы } WriteLn; { Пропуск строки } WriteLn(' ВВОД МАТРИЦЫ B:'); { Вывод подсказки } InputMatrix(B); { Ввод матрицы } WriteLn; { Пропуск строки } WriteLn(' Исходная матрица B: '); { Вывод заголовка } OutputMatrix(B); { Вывод матрицы } WriteLn; { Пропуск строки } MultMatrix(A,B,R); { Получение произведения A*B=R } WriteLn(' Произведение матриц A*B= '); { Вывод заголовка } OutputMatrix(R); { Вывод матрицы } WriteLn; { Пропуск строки } Write('Введите степень '); { Вывод приглашения ввести степень } ReadLn(p); { Ввод значения степени } PowerOfMatrix(A,p,B); { Возведение матрицы A в степень b } WriteLn('Матрица A^',p:0,'='); { Вывод заголовка } OutputMatrix(B); { Вывод матрицы } (*OutputMatrixF(R); { Вывод матрицы в файл } Given Received Resulting *) END. СХЕМА ПРОЦЕДУРЫ InputMatrix *************** * * * П У С К * * * *************** : : : ***************** ┌─ │ Ввод количества * * │ M,N ∙∙∙∙∙∙∙│ строк и столбцов * * │ │ матрицы ***************** └─ : : : ***************** ┌─ * * │ * * │ Инициализация * i:=1 *∙∙│ * * │ счетчика цикла * * │ ***************** └─ : :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. : : : : : : ***************** ┌─ : * * │ ─┐ ***************** * * │ Инициализация │ * * * j:=1 *∙∙│ Переопределение │ * * * * │ счетчика цикла │∙∙* i:=i+1 * * * │ счетчика цикла │ * * ***************** └─ │ * * : ─┘ ***************** : : : : : : : : :∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙. : : : : : *************** ┌─ : : * * │ : : * * │ Переопределение : : * j:=j+1 *∙∙∙∙∙∙∙│ : : * * │ счетчика цикла : : * * │ : : ***************** └─ : : : : : : : : ***************** ┌─ : : │ Ввод : : * * │ : : Matrix[i,j] ∙∙∙∙∙∙∙│ элемента : * * * │ : * * │ матрицы : * * ***************** └─ : * * Нет : : * j>N *∙∙∙∙∙∙∙∙∙∙∙∙∙∙' : * * : * * : * * : * : : Да : : : * : * * : * * : * * Нет : * i>M *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' * * * * * * * : Да : : *************** * * * К О Н Е Ц * * * *************** СХЕМА ПРОЦЕДУРЫ OutputMatrix *************** * * * П У С К * * * *************** : : ***************** ┌─ * * │ * * │ Инициализация * i:=1 *∙∙│ * * │ счетчика цикла * * │ ***************** └─ : :∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙. : : : : : : ***************** ┌─ : * * │ ─┐ ***************** * * │ Инициализация │ * * * j:=1 *∙∙│ Переопределение │ * * * * │ счетчика цикла │∙∙* i:=i+1 * * * │ счетчика цикла │ * * ***************** └─ │ * * : ─┘ ***************** : : : : : : : : :∙∙∙∙∙∙∙∙<∙∙∙∙∙∙∙∙∙∙∙∙∙. : : : : : *************** ┌─ : : * * │ : : * * │ Переопределение : : * j:=j+1 *∙∙∙∙∙∙∙│ : : * * │ счетчика цикла : : * * │ : : ***************** └─ : : : : : : : : ***************** ┌─ : : │ Вывод : : * * │ : : Matrix[i,j] ∙∙∙∙∙∙∙│ элемента : * * * │ : * * │ матрицы : * * ***************** └─ : * * Нет : : * j>N *∙∙∙∙∙∙∙∙∙∙∙∙∙∙' : * * : * * ***************** * * * * Вывод * : Да конца : * строки * * * * ***************** * * : * * Нет : * i>M *∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙' * * * * * * * : Да : : *************** * * * К О Н Е Ц * * * *************** СХЕМА ПРОГРАММЫ *************** * * * П У С К * * * *************** : : : ***************** * * * * * * Ввод * * * * * * * * матрицы * * * * * * ***************** : : : ***************** * * * * * * Вывод * * * * * * * * матрицы * * * * * * ***************** : : *************** * * * К О Н Е Ц * * * ***************