Advertisement
Norvager

Умножение матриц

Feb 4th, 2018
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 3.23 KB | None | 0 0
  1. program n_1;
  2.  type
  3.   TM = array of array of integer;
  4.  var a, b, c:TM;
  5.      i, L1, S1, L2, S2: integer;
  6.  
  7. Procedure dsdjl(ar:TM);//Вывод матрицы
  8.     Var i, j : integer;
  9.     Begin
  10.    For i:=0 to (Length(ar)-1) do
  11.      Begin
  12.       for j:=0 to (Length(ar[0])-1) do
  13.        write(ar[i,j],' ');
  14.       writeln;
  15.      end;
  16.   End;
  17.  
  18. Procedure radome(ar:TM; var arr:TM);//Заполнение основных матриц
  19.    Var i, j : integer;
  20.    Begin
  21.      For i:=0 to (Length(ar)-1) do
  22.       Begin
  23.        for j:=0 to (Length(ar[0])-1) do
  24.         ar[i,j]:=random(10)+1;
  25.        writeln;
  26.       end;
  27.    End;
  28.  
  29. Function SumArr(ar,br:TM):TM;//Сумма матриц
  30.     Var i, j : integer;
  31.         Sum :TM;
  32.  Begin
  33.   SetLength(Sum, Length(ar));
  34.    for i:=0 to (Length(ar)-1) do
  35.     SetLength(Sum[i], (Length(ar[1])));
  36.    If ((Length(ar))<>(Length(br))) and ((Length(ar[1]))<>(Length(br[1]))) then
  37.        Writeln('Сложение невозможно')
  38.     Else
  39.      begin
  40.       For i:=0 to Length(ar) - 1 do
  41.         for j:=0 to Length(ar[i]) - 1 do
  42.            Sum[i,j]:=ar[i,j] + br[i,j];
  43.         Writeln('Сумма матриц >> ');
  44.       dsdjl(Sum);
  45.      end;
  46.     SumArr:=Sum;
  47.  End;
  48.  
  49. Function MultiArr(ar,br:TM):TM;//Умножение матриц
  50.     Var i, j, k, q, s:integer;
  51.         kl:array of integer;
  52.         Multip:TM;
  53.     Begin
  54.      s:=0;
  55.      SetLength(kl, (Length(ar)*Length(br[0])+1));
  56.      SetLength(Multip, Length(ar));//Выделение памяти под новую матрицу
  57.       for i:=0 to (Length(ar)-1) do
  58.        SetLength(Multip[i], (Length(br[0])));
  59.     If (Length(ar[0]))<>(Length(br)) then//Проверка возможности выполнения умножения
  60.        Writeln('Умножение невозможно')
  61.     Else
  62.      begin
  63.       writeln('Умножение матриц >>');
  64.        For i:= 0 to Length(br[0])-1 do
  65.        begin
  66.         For j:=0 to Length(ar)-1 do
  67.          begin
  68.            k:=0;
  69.            for q:=0 to Length(ar)-1 do
  70.             k:=k+ar[i,q]*br[q,j];//Само умножение
  71.            kl[s]:=k;
  72.            s:=s+1;
  73.            Write(k,' ');
  74.           end;
  75.         writeln;
  76.        end;
  77.      end;
  78.      s:=0;
  79.      MultiArr:=Multip;
  80.     End;
  81.  
  82.  
  83. Begin
  84.  Randomize;
  85.  Write('Введите кол-во строк в первой матрице >> ');
  86.  read(L1);
  87.  Write('Введите кол-во столбцов в первой матрице >> ');
  88.  read(S1);
  89.  SetLength(a, L1);
  90.  for i:=0 to (L1-1) do
  91.   SetLength(a[i], S1);
  92.  radome(a, a);
  93.  writeln('Первая матрица:');
  94.  dsdjl(a);
  95.  writeln;
  96.  
  97.   Write('Введите кол-во строк во второй матрице >> ');
  98.   read(L2);
  99.   Write('Введите кол-во столбцов во второй матрице >> ');
  100.   read(S2);
  101.   SetLength(b, L2);
  102.   for i:=0 to (L2-1) do
  103.    SetLength(b[i], S2);
  104.   radome(b, b);
  105.   writeln('Вторая матрица:');
  106.   dsdjl(b);
  107.   writeln;
  108.  
  109.   SumArr(a,b);//Вызов сложения матриц
  110.   writeln;
  111.  
  112.   c:=MultiArr(a,b);//Вызов умножения матриц
  113.   SetLength(c, Length(a));
  114.     for i:=0 to (Length(a)-1) do
  115.      SetLength(c[i], (Length(b[0])));
  116.  // dsdjl(c);
  117. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement