Ir para conteúdo

POWERED BY:

Arquivado

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

neto-tj

Problemas com Matriz C++

Recommended Posts

Boa noite pessoal, sou novo aqui no fórum , este é meu primeiro tópico (Y)! Mão na massa.

 

Então, preciso fazer um código que gera uma matriz de um grafo. Aparentemente muito simples, porém percebi que algo esta dando errado:


#include <iostream>
#include <conio2.h>
using namespace std;

int main()
{
   // entrada para as ligações
   int lig1=0, lig2=0, mat[3][3];

	//Preencher matriz com 0
	for (int i=0; i<4; i++){
     for (int j=0; j<4; j++){
       mat[i][j] = 0;
       }
     }

   for (int i = 0; i < 5; i++) {
     cout << "\nDigite as ligacoes:";
     cin >> lig1 >> lig2;
     mat[lig1-1][lig2-1] = 1;
     mat[lig2-1][lig1-1] = 1;

	//imprime matriz
for (int k = 0; k < 4; k++) {
       for (int j = 0; j < 4; j++) {
	cout << mat[k][j];
       }
       cout << endl;
     }
   }
return 0;
}

 

Por exemplo, quando você digita as ligações, esses números, que são uma posição na matriz, vira 1,

 

obs.: a matriz esta zerada!!!

 

Ex

se você digitar neste programa: "1" 'enter' "2", ele vai fazer o seguinte:

 

1 --> ir na posição da matriz [0][1], e atribuir o valor de = '1'; e vice versa, matriz[1][0] = 1.

 

Pra quem executou o código pode perceber apareceu um erro, quando você digita 1 e 2, a matriz impressa deveria ser assim:

 

0100

1000

0000

0000

 

Mas por algum motivo ela esta sendo impressa desa forma:

0101 <--

1000

0000

0000

 

Apareceu '1' na posição [0][3], mas Porque?

 

Estou tentando muito resolver este erro, se alguém conseguiu, por favor poste o resultado.

 

Agradeço desde já e obrigado ao fórum!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples declarou uma matriz 3x3 mais a usa como se fosse uma de 4x4.

 

3x3

0 0 0

0 0 0

0 0 0

 

4x4 =

0 0 0 0

0 0 0 0

0 0 0 0

0 0 0 0

 

Agora vamos a explicação do porque daquele 1.

 

quando você acessa a posição 3x0 em uma matriz de 3x3 por exemplo, você esta pegando o valor da posição 1x0.

logo se a matriz esta assim.

 

1 0 0

0 1 0

0 0 0

 

da forma que você esta imprimindo atualmente 4x4, o resultado é o seguinte em relação a matriz declarada.

 

0x0 0x1 0x2 1x0

1x0 1x1 1x2 2x0

2x0 2x1 2x2 2x3

3x0 3x1 3x2 3x3

 

 

Isso se deve a forma com que a matriz é armazenada na memoria, mais isso não vou explicar.

 

Repare nas partes em azul isso vai responder sua pergunta sobre o 1.

 

As posições em vermelho são lugares não alocados para essa matriz, você esta acessando e alterando partes da memoria que não devia e podem estar sendo usadas por outra variável e que cedo ou tarde pode gerar um falha de segmentação.

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.