Tolleds 0 Denunciar post Postado Maio 14, 2014 O Programa deve receber o numero de linhas e colunas de 2 matrizes... Se for possivel multiplica-las (O numero de colunas da 1° for igual ao numero de linhas da 2°) o programa deve realizar a multiplicação e imprimir a matriz resultante. Deve-se utilizar alocação dinâmica já que o tamanho das matrizes é inserido durante a execução. Eu fiz o programa mas quando chega na parte da multiplicação o executavel fica "Nao respondendo". Alguem me ajuda a Achar o Erro? #include <stdlib.h> #include <stdio.h> void imprimir_matriz(int **m, int l, int c){ // l = linha, c = coluna int i, j; for (i=0; i<l; i++){ for (j=0; j<c; j++){ printf("%d\t", m[j]); } printf("\n"); } } int main(){ int a, b, c, d, i, j, k, soma; int **mat, **mat2, **mat3; // Determinar numero de linhas e colunas de cada matriz printf("Matriz 1 - Escolha o Numero de Linhas e Colunas: \n"); scanf("%d%d", &a, &b ); printf("Matriz 2 - Escolha o Numero de Linhas e Colunas: \n"); scanf("%d%d", &c, &d); printf("Matriz 1:\n Linhas: %d Colunas: %d\nMatriz 2:\n Linhas: %d Colunas: %d\n", a, b, c, d); // Declarando Matrizes por Alocação Dinamica mat = (int*) malloc(a * sizeof(int)); for (i = 0; i < a; i++){ mat = (int*) malloc( b * sizeof(int)); } mat2 = (int*) malloc(c * sizeof(int)); for (i = 0; i < c; i++){ mat = (int*) malloc( d * sizeof(int)); } mat3 = (int*) malloc(a * sizeof(int)); for (i = 0; i < a; i++){ mat = (int*) malloc( d * sizeof(int)); } //Verificando Se é Possivel Multiplicar if (b != c){ printf ("Operacao invalida!\n"); } // Determinando elementos da matriz 1 e 2 else { for (i = 0; i < a; i++){ for (j = 0; j < b; j++){ printf ("Valor da linha [%d] e coluna [%d] da Matriz 1:\n", i, j); scanf("%d", &mat[j]); } } for (i = 0; i < c; i++){ for (j = 0; j < d; j++){ printf ("Valor da linha [%d] e coluna [%d] da Matriz 2:\n", i, j); scanf("%d", &mat2[j]); } } //Multiplicação das matrizes for (i = 0; i < a; i++){ for (j = 0; j < d; j++) { soma = 0; for (k = 0; k < b; k++){ soma = soma + mat[k]*mat2[k][j]; mat3[j] = soma; } } } imprimir_matriz(mat3,a,d); } free(mat); free(mat2); free(mat3); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Maio 14, 2014 Já tentou depurar o programa? Compartilhar este post Link para o post Compartilhar em outros sites
hugo_andrade 0 Denunciar post Postado Maio 16, 2014 Amigo Tolleds, seu programa possui erro em duas partes, primeiro na alocação dinâmica das matrizes, e segundo na operação de multiplicação das matrizes, abaixo segue a versão corrigida: #include <stdlib.h> #include <stdio.h> void imprimir_matriz(int **m, int l, int c){ // l = linha, c = coluna int i, j; printf("\n"); for (i=0; i<l; i++){ for (j=0; j<c; j++){ printf("%d\t", m[i][j]); } printf("\n"); } } int main(){ int a, b, c, d, i, j, k, soma; // Determinar numero de linhas e colunas de cada matriz printf("Matriz 1 - Escolha o Numero de Linhas e Colunas: \n"); scanf("%d%d", &a, &b ); printf("Matriz 2 - Escolha o Numero de Linhas e Colunas: \n"); scanf("%d%d", &c, &d); printf("Matriz 1:\n Linhas: %d Colunas: %d\nMatriz 2:\n Linhas: %d Colunas: %d\n", a, b, c, d); // Declarando Matrizes por Alocação Dinamica int **mat = (int**) malloc(a*sizeof(int*)); for (i = 0; i < a; i++){ mat[i] = (int*) malloc(b*sizeof(int)); } int **mat2 = (int**) malloc(c*sizeof(int)); for (i = 0; i < c; i++){ mat2[i] = (int*) malloc(d*sizeof(int)); } int **mat3 = (int**) malloc(a*sizeof(int)); for (i = 0; i < a; i++){ mat3[i] = (int*) malloc(d*sizeof(int)); } //Verificando Se é Possivel Multiplicar if (b != c){ printf ("Operacao invalida!\n"); exit(0); } // Determinando elementos da matriz 1 e 2 else { for (i = 0; i < a; i++){ for (j = 0; j < b; j++){ printf ("Valor da linha [%d] e coluna [%d] da Matriz 1:\n", i, j); scanf("%d", &mat[i][j]); } } for (i = 0; i < c; i++){ for (j = 0; j < d; j++){ printf ("Valor da linha [%d] e coluna [%d] da Matriz 2:\n", i, j); scanf("%d", &mat2[i][j]); } } //Multiplicação das matrizes for (i = 0; i < a; i++){ for (j = 0; j < d; j++) { soma = 0; for (k = 0; k < b; k++){ soma = soma + mat[i][k] * mat2[k][j]; } mat3[i][j] = soma; } } imprimir_matriz(mat3,a,d); } free(mat); free(mat2); free(mat3); return 0; } Perceba, que ao declarar as matrizes, você estava fazendo referencia de forma incorreta aos ponteiros, alocando assim de forma indevida as matrizes, oq proporcionava o erro de "Não Respondendo" . Outro erro encontrado, foi no momento em que é realizado a operação de multiplicação das matrizes, você estava atribuindo a cada iteração do laço for uma soma a sua célula resultado. Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
Tolleds 0 Denunciar post Postado Maio 19, 2014 Muito obrigado e desculpa a demora, fiquei sem internet por alguns dias devido à reforma na minha casa. Entendi o que estava errado. Muito obrigado Compartilhar este post Link para o post Compartilhar em outros sites