Matheus21 0 Denunciar post Postado Março 2, 2013 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
_Isis_ 202 Denunciar post Postado Março 2, 2013 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. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus21 0 Denunciar post Postado Março 2, 2013 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
_Isis_ 202 Denunciar post Postado Março 2, 2013 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
Matheus21 0 Denunciar post Postado Março 2, 2013 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