Технология постепенного наращивания программы с одновременной отладкой для вычисления матричного выражения, страница 5


·  Подпрограмма транспонирования

 


·  Подпрограмма суммы

 


·  Подпрограмма ввода из файла размеров и элементов матрицы

 


2.  Текст программы на языке Turbo Pascal

Program RGZ2_1b;

uses crt;

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

type

 mas=array[1..10,1..10] of real;

var

 a,b,c,bt,d,g,e:mas;

 i,j,i2,j2,i3,j3,m,n:integer;

 f:text;

{описание процедуры mout}

procedure mout (a:mas; i,j:integer);

var

 m,n:integer;

begin

 for m:=1 to i do

  begin

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

   writeln;

end;

 end;

{описание процедуры транспонирования (tr)}

procedure tr (p:mas; i2,j2:integer; var q:mas);

var

 m,n:integer;

 begin

  for m:=1 to i2 do

   for n:=1 to j2 do q[n,m]:=p[m,n]

 end;

{описание процедуры умножения (mult)}

procedure mult(p,q:mas; i,j,i2:integer;var z:mas);

var

 m,n,k:integer;

 sum:real;

begin

 for m:=1 to i2 do

  for k:=1 to i do

   begin

    sum:=0;

for n:=1 to j do

     sum:=4*p[k,n]*q[n,m]+sum;

    z[k,m]:=sum

   end;

end;

{описание функции суммы (sum)}

function sum(q,p:mas; i3,j3:integer; var w:mas): real;

var m,n:integer;

begin

 for m:=1 to i3 do

  for n:=1 to j3 do

   w[m,n]:=q[m,n]+p[m,n];

end;

begin

{очистка экрана}

 clrscr;

{ввод из файла размеров и элементов матрици A}

assign (f,'C:\tp\matrA.inp');

 reset(f);

 read(f,i,j);

 for m:=1 to i do

  for n:=1 to j do read (f,a[m,n]);

 close(f);

{ввод из файла размеров и элементов матрици B}

 assign (f,'C:\tp\matrB.inp');

 reset(f);

 read(f,i2,j2);

 for m:=1 to i2 do

  for n:=1 to j2 do read (f,b[m,n]);

 close(f);

{ввод из файла размеров и элементов матрици C}

 assign (f,'C:\tp\matrC.inp');

 reset(f);

 read(f,i3,j3);

 for m:=1 to i3 do

  for n:=1 to j3 do read (f,c[m,n]);

close(f);

{вывод матрици A}

 writeln('    матрица A');

 mout(a,i,j);

{вывод матрици B}

 writeln('    матрица B');

 mout(b,i2,j2);

{вывод матрици C}

 writeln('    матрица C');

 mout(c,i3,j3);

{транспонирование и вывод матрици B}

 tr(b,i2,j2,bt);

 writeln('  B транспонированная');

 mout(bt,j2,i2);

{умножение матрици A на B транспонированную}

 mult(a,bt,i,j,i2,g);

 writeln('  4*A умноженная на B транспонированную');

 mout(g,j2,i2);

{A*B трансп. +С)}

 sum(g,c,i3,j3,e);

 writeln(' 4*A*B трансп. +C');

 mout(e,i3,j3);

 readln;

end.

Анализ результатов расчета

В результате написания программы получаем следуюший результат: