Multiplicação de matrizes


Em algumas linguagens podemos expressar da seguinte forma nossa necessidade computacional:
matriz mat1, mat2, mat3;
"leia mat1";
"leia mat2";
mat3=mat1*mat2;

C não é uma destas linguagens. Para multiplicar matrizes voce terá que usar arranjos de arranjos e especificar todas as somas e multiplicação de valores escalares que devem ocorrer de forma intermediária.
 


Algoritmo para multiplicação de matrizes

programa multiplica_matrizes;
   matriz mat1, mat2, mat3;
   inteiro linha, coluna, i, acumula;
   "leia mat1";
   "leia mat2";
   "verifique se mat1 é compativel com mat2";
   para linha de 1 até "numero de linhas de mat1" faça
     para coluna de 1 até "numero de colunas de mat2" faça
       acumula=0;
       para i de 1 até "numero de colunas de mat1" faça
         acumula=acumula+mat1[linha][i]*mat2[i][coluna];
       fimpara;
       mat3[linha][coluna]=acumula;
     fimpara;
   fimpara;
   imprima mat3;
fim programa;


O programa em C abaixo representa matrizes através de arranjos de arranjos de int;
Compare o algoritmo e o programa. No lugar de “leia mat1” e “leia mat2” temos iniciação

int main(int argc, char *argv[])
{ int linha;
  int coluna;
  int i;
  int somaprod;
  int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}};
  int mat2[3][3]={{1,0,0},{0,1,0},{0,0,1}};
  int mat3[3][3];
  int M1L=3, M1C=3, M2L=3, M2C=3;
  for(linha=0; linha<M1L; linha++)
    for(coluna=0; coluna<M2C; coluna++){
      somaprod=0;
      for(i=0; i<M1L; i++) somaprod+=mat1[linha][i]*mat2[i][coluna];
      mat3[linha][coluna]=somaprod;
    }
  //
  //imprime mat3
  //
  for(linha=0; linha<M1L; linha++){
    for(coluna=0; coluna<M2C; coluna++)
      printf("%d ", mat3[linha][coluna]);
    printf("\n");
  }
  system("PAUSE");     
  return 0;
}