Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus21

Multiplicação de matrizes em C

Recommended Posts

Olá, boa noite.

 

To fazendo uns exercícios de matrizes e cheguei na multiplicação de matrizes. Esse programa quer que multiplique uma matriz A[n][m] * B[m][p] e isso resulta em C[n][p]

 

Tentei fazer e travei no for. Tenho que multiplicar a linha de A pela coluna de B e armazenar em C

 

A B C

2 -1 -1 0 -1 1 -4 8

1 4 0 0 2 -3 = 7 -11

-1 0 0 -2 0 -2 3 -1

-1 0

 

Minha dificuldade é em quantas vezes fazer isso e por onde começar a armazenar na matriz C. Tentei algumas soluções, sendo essa a ultima, e não deu certo:

 

 

for (i = 0; i < n; i = i + 1) {
    for (j = 0; j < p; j = j + 1) {
    C[i][j] = 0;
    for (i = 0; i < m; i = i + 1) {
      for (j = 0; j < m; j = j + 1) {
    C[i][j] = C[i][j] + A[i][j] * B[i][j];
      }
    }
  }  
}

 

 

Alguém tem alguma ideia de como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é como as matrizes vão andar, porque todas tem dimensão diferente e isso causa muita confusão... Como multiplica eu entendo. Talvez eu não saiba como utilizar o for nessa situação.

 

A matriz A tem 3 por 4, a B tem 4 por 2 e a C tem 3 por 2.

 

Pra multiplicar eu teria que percorrer as duas matrizes com indices diferentes?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não vejo nada de mais em ter dimensões diferentes. O que deve ser verificado é se elas podem ser multiplicadas. Só isso.

 

C[0][0] = A[0][0] * B[0][0] + A[0][1] * B[1][0] + ... + A[0][n] * B[n][0]

C[0][1] = A[0][0] * B[0][1] + A[0][1] * B[1][1] + ... + A[0][n] * B[n][1]

C[1][0] = A[1][0] * B[0][0] + A[1][1] * B[1][0] + ... + A[1][n] * B[n][0]

 

Repare que a mesma variação do índice acontece na coluna do elemento da matriz A e na linha do elemento da matriz B. Você pode reaproveitar indices.

 

 

for(i=0;i<a;i++) {
   for(j=0;j<c;j++) {
      sum=0;
      for(k=0;k<b;k++) {
         sum=sum+(m[i][k]*n[k][j]);
         l[i][j]=sum;
      }
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, ainda to meio confuso quanto aos índices, mas farei uma simulação no lápis e papel que isso sempre me ajuda, gosto de entender exatamente como tudo funciona.

 

Percebi no seu trecho que precisava de um índice a mais e então consegui acertar meu codigo

 

 

#include <stdio.h>
#define MAX 100
int main () {
  int n, m, p, i, j, k, soma, A[MAX][MAX], B[MAX][MAX], C[MAX][MAX];
  scanf ("%d %d %d", &n, &m, &p);
  for (i = 0; i < n; i = i + 1) {
    for (j = 0; j < m; j = j + 1) {
      scanf ("%d", &A[i][j]);
    }
  }
  for (i = 0; i < m; i = i + 1) {
    for (j = 0; j < p; j = j + 1) {
      scanf ("%d", &B[i][j]);
    }
  }
  for (i = 0; i < m; i = i + 1) {
    for (j = 0; j < p; j = j + 1) {
      soma = 0;
      for (k = 0; k < m; k = k + 1) {
    soma = soma + A[i][k] * B[k][j];
    C[i][j] = soma;
      }
    }
  }
  for (i = 0; i < n; i = i + 1) {
    for (j = 0; j < p; j = j + 1) {
      printf ("%d ", C[i][j]);
    }
    printf ("\n");
  }
  return 0;
}

 

Problema resolvido!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.