Помощь - Поиск - Пользователи - Календарь
Полная версия: сравнение и перемножение матриц
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Павел
Есть недоделанная программка, нужно оформить в виде функций или процедур сравнение и перемножение матриц.
Код

program kursovaya;
Uses  crt;
Const amax=50; bmax=50;
Type massiv = array [1..amax,1..bmax] of real;
var
  a1, b1, a2, b2, a3, b3, a4, b4, i, j, k: integer;
  s, l: real;
  m1, m2, m3, m4: massiv;

Procedure input_array (a,b: integer; var mas: massiv);
  var i,j: integer;
  begin
   for i:=1 to a do
    for j:=1 to b do
     begin
      randomize;
       for i:=1 to a do
       for j:=1 to b do
       mas[i,j]:=random(50);
     end;
   end; {input_array}

Procedure out_array (a, b:integer; mas: massiv);
  var i, j: integer;
   begin
    write('Matrica ',a:2); writeln(' X',b:2);
    for i:=1 to a do
     begin
      writeln;
      for j:=1 to b do
       write(mas[i,j]:4:0);
     end;
     writeln;
   end;  {out_array}
Begin
    clrscr;
   Writeln('Vvedite matricu 1');
   Repeat
    Write('Vvedite kolichestvo strok matrici m1 <= '  ,amax:2);
    write(', i = ');
    readln(a1);
    Write('Vvedite kolichestvo stolbcov matrici m1 <= ',bmax:2);
    write(', j = ');
    readln(b1);
   Until (a1<=amax) and (b1<=bmax);
    input_array (a1,b1,m1);
    out_array (a1,b1,m1);
    readln;
     Writeln('Vvedite matricu 2');
   Repeat
    Write('Vvedite kolichestvo strok matrici m2 <= '  ,amax:2);
    write(', i = ');
    readln(a2);
    Write('Vvedite kolichestvo stolbcov matrici m2 <= ',bmax:2);
    write(', j = ');
    readln(b2);
   Until (a2<=amax) and (b2<=bmax);
    input_array (a2,b2,m2);
    out_array (a2,b2,m2);
    readln;
     Writeln('Vvedite matricu 3');
   Repeat
    Write('Vvedite kolichestvo strok matrici m3 <= '  ,amax:2);
    write(', i = ');
    readln(a3);
    Write('Vvedite kolichestvo stolbcov matrici m3 <= ',bmax:2);
    write(', j = ');
    readln(b3);
   Until (a3<=amax) and (b3<=bmax);
    input_array (a3,b3,m3);
    out_array (a3,b3,m3);
    readln;
     Writeln('Vvedite matricu 4');
   Repeat
    Write('Vvedite kolichestvo strok matrici m4 <= '  ,amax:2);
    write(', i = ');
    readln(a4);
    Write('Vvedite kolichestvo stolbcov matrici m4 <= ',bmax:2);
    write(', j = ');
    readln(b4);
   Until (a4<=amax) and (b4<=bmax);
    input_array (a4,b4,m4);
    out_array (a4,b4,m4);
    readln;

      writeln (a1, b1, a2, b2, a3, b3, a4, b4);   {vse [i,j]}

      for i:=1 to a1 do
       for j:=1 to b2 do
      begin
      s:=0;                       {umnogenie matric}
      for k:=1 to a1 do
      s:=s+m1[i,k]*m2[k,j];
      m4[i,j]:=s;
      end;

      for i:=1 to a1 do
       begin
       writeln;
      for j:=1 to b2 do
       write(m4[i,j]:4:0, ' ');
       end;
      writeln;
      writeln;


       begin                
       l:=0;
       for i:=1 to a1 do
       l:=l+m4[i,i];              {summa el-tov na glavnoy diagonali}
       end;
       writeln(l:4:0);
       readln;



readln;
End.
BlackShadow
Умножение:
Код

Procedure MMul(Const m1,m2:massiv;WidthOfm1,HeightOfm2:Integer;Var Res:massiv);
Var
 i,j,k:Integer;
 s:Real;
Begin
 For i:=1 To WidthOfm1 Do
   For j:=1 To HeightOfm2 Do
   Begin
     s:=0;
     For k:=1 To WidthOfm1 Do
       s:=s+m1[i,k]*m2[k,j];
     Res[i,j]:=s;
     end;
End;

Function MCmp(Const m1,m2:massiv;Width,Height:Integer):Boolean;
Var
 i,j:Integer;
Begin
 MCmp:=False;
 For i:=1 To Width Do
   For j:=1 To Height Do
     If m1[i,j]<>m2[i,j] Then
       Exit;
 MCmp:=True
End;


Вроде бы и всё...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.