Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

estou tendo um problema com um codigo

fiz um codigo para reconhecer se duas matrizes sao iguais, porem ele ta saindo sempre que as matrizes sao iguais e eu creio q minha logica ta certa mas posso ter falhado em algo

#include<stdio.h>

#include<stdlib.h> int main()`{ //def da matriz int linha, coluna, i, j, igual = 1; int matriz1[linha][coluna], matriz2[linha][coluna];

printf("Entre com os tamanhos das matrizes (linha e coluna): ");
scanf("%d %d", &linha, &coluna);

for(i = 0; i < linha; i++){
    for(j = 0; j < coluna; j++){
        printf("Entre com o elemento da matriz 1 da linha %d e coluna %d: ",(i+1),(j+1));
        scanf("%d", &matriz1[linha][coluna]);
    }
}

for(i = 0; i < linha; i++){
    for(j = 0; j < coluna; j++){
        printf("Entre com o elemento da matriz 2 da linha %d e coluna %d: ",(i+1),(j+1));
        scanf("%d", &matriz2[linha][coluna]);
    }
}

for(i = 0; i < linha; i++){
    for(j = 0; j < coluna; j++){
        if(matriz1[linha][coluna] != matriz2[linha][coluna]){
            igual = 0;
        }
    }
}

if(igual == 1){
    printf("Matrizes iguais.");
} else {
    printf("Matrizes diferentes.");
}

return 0;

}

2 respostas
solução!

Ola Leonardo,

O problema aqui é que você não está inicializando as variaveis "linha" e "coluna" antes de alocar o tamanho da Matriz. Quando você instancia uma variável sem inicializá-la, ela mantem um valor de resíduo, e é aleatório. Você pode verificar isso fazendo um:

        int linha, coluna, i, j, igual = 1; 
    int matriz1[linha][coluna], matriz2[linha][coluna];

    printf ("Valor de linha: %d\nValor de coluna: %d\n", linha, coluna);
    printf("Entre com os tamanhos das matrizes (linha e coluna): ");
    scanf("%d %d", &linha, &coluna);

Antes de perguntar pro usuário qual o tamanho de linha e coluna que ele quer. Veja o que ele trás de resposta:

Saída do prompt dos valores aleatórios de linha e coluna

E logo abaixo da inicialização destas variaveis, você já está alocando a Matriz com o tamanho de acordo com esses valores aleatórios.

A solução para este problema seria fazer alocação dinamica. Mas caso este seja um conceito ainda avançado para você, recomendo você iniciar as variaveis "linha" e "coluna" com valores fixos e não perguntar para o usuário qual será o tamanho das Matrizes.

Você pode até pensar: "Então vou iniciar a matriz DEPOIS de perguntar pro usuário o tamanho das Matrizes. Deste jeito:"

    int linha, coluna, i, j, igual = 1; 

    printf("Entre com os tamanhos das matrizes (linha e coluna): ");
    scanf("%d %d", &linha, &coluna);

    int matriz1[linha][coluna], matriz2[linha][coluna];

Funciona? Funciona. Mas não é uma boa prática de programação.

Eu deixei deste jeito:

#include<stdio.h>
#include<stdlib.h> 

int main(){ 
    //def da matriz 
    int linha=2, coluna=2, i, j, igual = 1; 
    int matriz1[linha][coluna], matriz2[linha][coluna];

    //printf("Entre com os tamanhos das matrizes (linha e coluna): ");
    //scanf("%d %d", &linha, &coluna);

    for(i = 0; i < linha; i++){
        for(j = 0; j < coluna; j++){
            printf("Entre com o elemento da matriz 1 da linha %d e coluna %d: ",(i+1),(j+1));
            scanf("%d", &matriz1[linha][coluna]);
        }
    }

    for(i = 0; i < linha; i++){
        for(j = 0; j < coluna; j++){
            printf("Entre com o elemento da matriz 2 da linha %d e coluna %d: ",(i+1),(j+1));
            scanf("%d", &matriz2[linha][coluna]);
        }
    }

    for(i = 0; i < linha; i++){
        for(j = 0; j < coluna; j++){
            if(matriz1[linha][coluna] != matriz2[linha][coluna]){
                igual = 0;
            }
        }
    }

    if(igual == 1){
        printf("Matrizes iguais.");
    } else {
        printf("Matrizes diferentes.");
    }

    return 0;
}

Espero ter ajudado.

obrigado felipe, vou dar uma olhada em alocacao dinamica pq no exercicio o usuario quem tem q definir o tamanho da matriz, mas vc ajudou mto pq eu nem sabia oq estava errando obg msm

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software