Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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?
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;
}
}
}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!
http://www.brasilescola.com/matematica/multiplicacao-matrizes.htm
Lembre que os índices começam por 0. É mais fácil começar pela primeira linha e primeira coluna.