Multiplicação de matrizes

Publicado por White Hawk (última atualização em 07/07/2011)

[ Hits: 52.385 ]

Download multiplicacao_matrizes.c




Este é um script em C que calcula o produto entre duas matrizes de ordem até 50.

  



Esconder código-fonte

//Programa que realiza a multiplicação entre duas matrizes. 

#include <stdio.h>

main() {
  
  int i1, j1, i2, j2, i, j, k, m1[50][50], m2[50][50], m3[50][50];
    
  printf("\n==========MULTIPLICACAO DE MATRIZES==========\n");
  printf("\nMatriz 1\n==========\n");
  printf("\nDigite o numero de linhas...: ");
  scanf("%d", &i1);
  printf("Digite o numero de colunas..: ");
  scanf("%d", &j1);
  printf("\nMatriz 2\n==========\n");
  printf("\nDigite o numero de linhas...: ");
  scanf("%d", &i2);
  printf("Digite o numero de colunas..: ");
  scanf("%d", &j2);
  if (j1 == i2) {
    printf("\nValores da Matriz 1\n=====================\n\n");
    for (i=0; i<i1; i++) {
      for(j=0; j<j1; j++) {
        printf("Digite um valor para [%d][%d].: ", (i+1), (j+1));
        scanf("%d", &m1[i][j]);

      }

    }

    printf("\nValores da Matriz 2\n=====================\n\n");
    for (i=0; i<i2; i++) {
      for (j=0; j<j2; j++) {
        printf("Digite um valor para [%d][%d].: ", (i+1), (j+1));
        scanf("%d", &m2[i][j]); 

      }

    }

    for (i=0;i<i1; i++) {
      for (j=0; j<i1; j++) {
        for (k=0; k<j1; k++) {
          m3[i][j] = m3[i][j] + (m1[i][k] * m2[k][j]); 

        }

      }
    
    }

    printf("\nMatriz 3\n=====================\n\n");

    for (i=0; i<i1; i++) {
      for (j=0; j<j2; j++) {
        printf("%d ", m3[i][j]);

      }

      printf("\n");

    }

    printf("\n");

  }

  else {
      printf("\nErro! Impossivel multiplicar as matrizes informadas.\n");

    }
  
  return(0);  

}

Scripts recomendados

my_strlen

Calcula Força Gravitacional

Lista ligada simples, algoritmos de inserção, busca e impressão

Média das idades

Conta e substitui caracteres de uma frase


  

Comentários
[1] Comentário enviado por willer123 em 06/10/2016 - 14:01h

Bom dia, sugiro que depois de cada for referente a preencher as linhas seja adicionado um printf(\n); para um melhor uso, percebi que seu algorítimo funciona bem com matrizes quadradas, porém isso não ocorre com matrizes de ordens diferentes exemplo 3x4 x 4x4. se você permitir eu mesmo poderia fazer as atualizações. Obrigado.

[2] Comentário enviado por mpaiva2505 em 02/11/2023 - 00:13h

A rotina é muito boa, parabens, eu iria sugerir uma alteração que leva alteração em alguns pontos, alterar as matrizes para float e não integer, dai tem que mudar nos scafs e printf os %d para %f, daí podemos manipular dados do conjunto dos números reais, exemplo, para solução do sistema [3400,2800;8,45]*[x1;x2] = [3000;21], que pode ser representado por A*X = B ---> X=B/A ---> X=1/A*B ----> X = inversaA * V ---> [x1;x2] = [0.00034456,-0.02143951;-0.00006126,0.02603369]*[3000;21], cuja solução será: S=[x1;x2]=[0.583450;0.362927] ...
//Programa que realiza a multiplicação entre duas matrizes.

#include <stdio.h>

int main() {

int i1, j1, i2, j2, i, j, k;
float m1[50][50], m2[50][50], m3[50][50];

printf("\n==========MULTIPLICACAO DE MATRIZES==========\n");
printf("\nMatriz 1\n==========\n");
printf("\nDigite o numero de linhas...: ");
scanf("%d", &i1);
printf("Digite o numero de colunas..: ");
scanf("%d", &j1);
printf("\nMatriz 2\n==========\n");
printf("\nDigite o numero de linhas...: ");
scanf("%d", &i2);
printf("Digite o numero de colunas..: ");
scanf("%d", &j2);
if (j1 == i2) {
printf("\nValores da Matriz 1\n=====================\n\n");
for (i=0; i<i1; i++) {
for(j=0; j<j1; j++) {
printf("Digite um valor para [%d][%d].: ", (i+1), (j+1));
scanf("%f", &m1[i][j]);

}

}

printf("\nValores da Matriz 2\n=====================\n\n");
for (i=0; i<i2; i++) {
for (j=0; j<j2; j++) {
printf("Digite um valor para [%d][%d].: ", (i+1), (j+1));
scanf("%f", &m2[i][j]);

}

}

for (i=0;i<i1; i++) {
for (j=0; j<i1; j++) {
for (k=0; k<j1; k++) {
m3[i][j] = m3[i][j] + (m1[i][k] * m2[k][j]);

}

}

}

printf("\nMatriz 3\n=====================\n\n");

for (i=0; i<i1; i++) {
for (j=0; j<j2; j++) {
printf("%f ", m3[i][j]);

}

printf("\n");

}

printf("\n");

}

else {
printf("\nErro! Impossivel multiplicar as matrizes informadas.\n");

}

return(0);

}

saida:

Digite um valor para [1][1].: 0.00034456
Digite um valor para [1][2].: -0.02143951
Digite um valor para [2][1].: -0.00006126
Digite um valor para [2][2].: 0.02603369

Valores da Matriz 2
=====================

Digite um valor para [1][1].: 3000
Digite um valor para [2][1].: 21

Matriz 3
=====================

0.583450
0.362927




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts