zeguel 0 Denunciar post Postado Março 20, 2009 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
quitZAUMMM 18 Denunciar post Postado Março 20, 2009 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
zeguel 0 Denunciar post Postado Março 20, 2009 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
quitZAUMMM 18 Denunciar post Postado Março 20, 2009 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