Решите пожалуйста задачу:Заданы две целочисленные матрицы A и B. Матрица A состоит из N...

0 голосов
41 просмотров

Решите пожалуйста задачу:Заданы две целочисленные матрицы A и B. Матрица A состоит из N строк и M столбцов, Матрица B состоит из M строк и P столбцов. Требуется вычислить произведение данных матриц A*B.язык паскаль


Информатика (33 баллов) | 41 просмотров
0

Настоящее матричное произведение с результирующей матрицей размера NxP ?

Дан 1 ответ
0 голосов
Правильный ответ

// PascalABC.NET 3.1, сборка 1219 от 16.04.2016
type
  Matrix=array[,] of integer;

procedure MatPrint(a:Matrix; w:integer);
begin
  for var i:=0 to Length(a,0)-1 do begin
    for var j:=0 to Length(a,1)-1 do Write(a[i,j]:w);
    Writeln
    end
end;

procedure MatProd(a,b,c:Matrix);
begin
  for var i:=0 to Length(a,0)-1 do
    for var j:=0 to Length(b,1)-1 do begin
      var s:=0;
      for var k:=0 to Length(a,1)-1 do s+=a[i,k]*b[k,j];
      c[i,j]:=s
      end
end;

begin
  var a,b,c:Matrix;
  var m,n,p:integer;
  Write('Число строк матрицы А: '); Read(n);
  Write('Число столбцов матрицы А и строк матрицы В: '); Read(m);
  Write('Число столбцов матрицы В: '); Read(p);
  a:=MatrixRandom(n,m,-50,50);
  Writeln('Матрица А'); MatPrint(a,4);
  b:=MatrixRandom(m,p,-50,50);
  Writeln('Матрица B'); MatPrint(b,4);
  SetLength(c,n,p);
  Writeln('Матрица C');
  MatProd(a,b,c);
  MatPrint(c,7)
end.

Тестовое решение:
Число строк матрицы А: 4
Число столбцов матрицы А и строк матрицы В: 8
Число столбцов матрицы В: 7
Матрица А
  33 -30  20   7   1   5  10 -47
  -6  -1 -22   6 -33  41   4  -1
 -10 -45 -16   6 -13   9   1  37
   5  37  15 -48  42 -19   1  26
Матрица B
 -19  42 -14 -36  38 -18 -41
 -24 -20  26 -50 -36  -5 -32
  -1   5 -43  15  11  49   0
 -44 -35 -27  20  33 -49  14
  40   7 -38 -37  48   2 -26
 -24   5 -11  12 -43  47 -42
 -24  11   8 -13  -9 -13 -12
 -41  46 -24  20   3 -25 -25
Матрица C
   1372   -179  -1176   -295   2387   1475    524
  -2463   -580   1701   1697  -3622    575   -525
  -1255   1857   -989   3806    353  -1214    957
   2160   2631   -460  -4040    341   1340  -3017

(142k баллов)