Ir para conteúdo

POWERED BY:

Arquivado

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

Tolleds

Qual Erro do meu programa?

Recommended Posts

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

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

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

×

Informação importante

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