Разработка программ для вычисления матричного выражения, страница 5

writeln;

end;

close(f); {закрытие файла 'matr.inp' для чтения}

writeln;

for i:=1 to na do {транспонирование матрицы А}

for j:=1 to ma do AT[i,j]:=A[j,i];

writeln('матрица At='); {вывод матрицы AT на экран}

for i:=1 to na do begin

for j:=1 to ma do write(AT[i,j]:5:0);

writeln;

end;

writeln;

for i:=1 to na do {умножение транспонированной матрицы А на матрицу В}

for j:=1 to nb do begin

s:=0;

for k:=1 to mb do s:=S+AT[i,k]*B[k,j];

ATB[i,j]:=s;

end;

writeln('матрица AT*B='); {вывод матрицы ATB на экран}

for i:=1 to na do begin

for j:=1 to nb do write(ATB[i,j]:5:0);

writeln;

end;

writeln;

for i:=1 to na do {разность между полученным произведением и матрицей 3С}

for j:=1 to nc do ATB3C[i,j]:=ATB[i,j]-3*C[i,j];

writeln('матрица AT*B-3C='); {вывод матрицы ATB3C на экран}

for i:=1 to na do begin

for j:=1 to nc do write(ATB3C[i,j]:5:0);

writeln;

end;

writeln;

for i:=1 to nc do {транспонирование результата}

for j:=1 to na do ATB3CT[i,j]:=ATB3C[j,i];

writeln('матрица (AT*B-3C)T='); {вывод матрицы ATB3CT на экран}

for i:=1 to nc do begin

for j:=1 to na do write(ATB3CT[i,j]:5:0);

writeln;

end;

end. {конец программы}

II. с использованием процедур

program matrix;

{вычисление матричного выражения с использованием процедур}

type mas=array [1..10,1..10] of real; {описание новой переменной}

{описание массивов и переменных}

var A,B,C,AT,ATB,ATB3C,ATB3CT: mas;

i,j,ma,mb,mc,na,nb,nc: integer;

f: text; {описание файловой переменной}

{подпрограмма-процедура для транспонирования матрицы}

procedure tr(m,n:integer;A:mas;var AT:mas); {заголовок}

var i,j: integer; {описание локальных переменных подпрограммы tr}

begin {начало операторной части подпрограммы tr}

for i:= 1 to m do

for j:= 1 to n do AT[j,i]:=A[i,j]; {транспонирование матрицы}

end; {конец подпрограммы tr}

{подпрограмма-процедура для умножения матриц}

procedure mult(m,l,n:integer;AT,B:mas;var ATB:mas); {заголовок}

{описание локальных переменных подпрограммы mult}

var i,j,k: integer;

s: real;

begin {начало операторной части подпрограммы mult}

for i:= 1 to m do

for j:= 1 to n do begin {начало составного оператора}

s:= 0;

for k:= 1 to l do s:=s+AT[i,k]*B[k,j];

ATB[i,j]:=s;

end; {конец составного оператора}

end; {конец подпрограммы mult}

{подпрограмма-процедура для разности матриц}

procedure sum(m,n:integer;ATB,C: mas;var ATB3C:mas); {заголовок}

var i,j: integer; {описание локальных переменных подпрограммы sum}

begin {начало операторной части подпрограммы sum}

for i:= 1 to m do

for j:= 1 to n do ATB3C[i,j]:=ATB[i,j]-3*C[i,j]; {разность матриц}

end; {конец подпрограммы mult}

{подпрограмма-процедура для вывода матрицы на экран}

procedure mout(m,n:integer;D:mas); {заголовок}

var i,j: integer; {описание локальных переменных подпрограммы mout}

begin {начало операторной части подпрограммы sum}

for i:= 1 to m do begin

for j:= 1 to n do write(D[i,j]:5:0);

writeln;

end{конец операторной части подпрограммы mult}

end; {конец подпрограммы mout}

{основная программа}

begin {начало операторной части}

{установка соответствия файловой переменной с файлом 'matr.inp'}

assign(f,'matr.txt');

reset(f); {открытие файла 'matr.inp' для чтения}

for i:= 1 to ma do {ввод размеров и элементов матрицы А из файла 'matr.inp'}

for j:= 1 to na do read(f,A[i,j]);

read(f,mb,nb); {ввод размеров и элементов матрицы В из файла 'matr.inp'}