Ir para conteúdo

POWERED BY:

Arquivado

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

zeguel

arrays

Recommended Posts

Bem, na faculdade tenho que fazer um trabalho em c...

 

A fazer o trabalho deparei m com o seguinte problema...

 

eu tenho um array [50][50], e supostamente este array é o responsável por " desenhar" e "criar" uma espécie de casa... ou seja com já devem ter compreendido... board[0][0] corresponde á casa na posição 0,0.... ok penso q já consegui explicar +/- o que acontece, o porblema é que agora tenho que fazer operações com as casas ortogonais ou seja, pegando nos pontos cardeais, a casa [x][y] tem a seguinte vizinhança, norte sul este e oeste... até agora tudo bem apenas eu tenho que pegar na maior diferença de cada casa e fazer as operações, o problema é que aparece m a celebre segmentation fault e eu já alterei o codigo de todas as maneiras possiveis e mesmo assim continua a dar o erro... já agora eu tenho isto feito com if's e se mudar para cases já nao dá o erro...voces irao perguntar pk que nao uso os cases, apenas nao quero ir por aí...

 

float n,s,o,e,maior_da;
	float param;
	n=0;
	s=0;
	o=0;
	e=0;	
	param=paramA;
	//Horizontalmente 
	if (x==0)
		{ 	
			//abs para tornar as diferenças em nrs sempre positivos
			e=abs((board [x][y]) - (board[x+1][y]));
		}
		
	else if (x==XLEN)
			{ 	
			o=abs((board [x][y]) - (board[XLEN-1][y]));
			}
			
	else
		{ 	
			e=abs((board [x][y]) - (board[x+1][y]));
			o=abs((board [x][y]) - (board[y-1][y]));
		}
	//Perguntar se duas casas tiverem a mesma diferença o que fazer? alterar as duas?
	maior_da=0;
	if ((o>e)&&((o>0) && (o<param)))
	{maior_da = o;}
	else if ((e>0) &&(e<param))
	{
		if (e>maior_da)
			{ maior_da = e;}
	}
	
	//Verticalmente
	if (y==0)
		{ s=((board [x][y]) - (board[x][y+1]));}
		else if (y==YLEN)
				{ n=abs((board [x][y]) - (board[x][YLEN-1]));}
		else
			{ 	
				s=abs((board [x][y]) - (board[x][y+1]));
				n=abs((board [x][y]) - (board[x][y-1]));
			}
			
	if ((n>s) && ((n>0)&&(n<param)))
	{
		if (n>maior_da) {maior_da=n;}
	}
		else
		{
			if ((s>maior_da)&&((s>0)&&(s<param))) {maior_da=s;}
		}
	if ( maior_da==o )
			{
				board [x][y] -=(maior_da/2);
				board [x-1][y] +=(maior_da/2);
			}
		
	else if (maior_da==e)
		{
				board [x][y] -= (maior_da/2);
				board [x+1][y] +=(maior_da/2);
		}
	else if (maior_da==n){
				board [x][y] -= (maior_da/2);
				board [x][y-1] +=(maior_da/2);
	}
	else 
		{
			if (maior_da==s){
				board [x][y]-= (maior_da/2);
				board [x][y+1] +=(maior_da/2);}
		}
}

peço desculpa pela extenção do codigo mas sou muito verde em c... :S

 

qqr ideia pa melhor o o programa ou alterar o código é bem vindo já agora eu inicio a função assim:

for (i=0;i<XLEN;i++)
	  for (j=0;j<YLEN;j++)
		 diferenca_alt(board,i,j);
}

thanks any way

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe naum tenho compilador aki, + o erro acontece em q momento, você sabe?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

desculpe naum tenho compilador aki, + o erro acontece em q momento, você sabe?

 

[]s

 

 

nao sei mas imagino..:)....eu penso que tem a ver com as operações ou seja... eu tenho um limite no array de 0 - 50....e ao fazer board[x+1][y-1]( algo do genero) posso ultrapassar esse limite nao sei se me fiz entender...mas eu ao ler o código nao encontro maneira de isso acontecer, pk axo q coloquei as condições certas para que isso nao aconteça... o que me espanta mais é que exactamente o mesmo código mas com cases funciona 5estrelas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

UHFADUSHFUAHDS..

poste ai do jeito q você ta fazendo com cases, ai eu faço com if's do mew jeito..

 

[]s

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.