Jump to content
Sign in to follow this  
Stevenpereira

Verificar vizinhança Matriz

Recommended Posts

Stevenpereira

Boa noite pessoal...

Estou com um problema a verificar a vizinhança de uma matriz....O meu programa funciona com threads e está implementado com recurso ao Produtor/Consumidor, e eu tenho que verificar os vizinhos de uma matriz e adicionar a um arras, mas com este código está-me a dar-me core dump...

//m ->linha atual
//sizeIdx -> nº de posições que tenho que ir buscar ( cima/baixo, esquerda/direira)
//p->lines -> total de linhas da matriz
//p->columns -> total de colunas da matriz


for(m = MAX(0,x-sizeIdx); m <= MIN(x+sizeIdx, p->lines); m++){
for (n= MAX(0,y-sizeIdx); n <= MIN(y+sizeIdx, p->columns); n++){
printf("M: %d N : %d \n", m,n);
printf("MN: %d\n", p->A[m][n].rgb[0]);
array[counter] = p->A[m][n].rgb[0];
counter++;
}
}

O meu problema é quando ele esta na ultima linha, na 1 coluna...rebenta-me !!!! Eu penso que me estou a esquecer de algum pormenor na validação...Agradecia a vossa ajuda

Edited by thoga31
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

for(m = MAX(0,x-sizeIdx); m <= MIN(x+sizeIdx, p->lines); m++){
 for(n= MAX(0,y-sizeIdx); n <= MIN(y+sizeIdx, p->columns); n++){

se a matrix tiver X linhas e/ou Y colunas, que valor é MIN(A, X) ou MIN(B, Y) para todo o A > X e B > Y ?

que valores podem tomar m e n no seu limite superior ?

são esses valores válidos no acesso aos elementos da matrix ?

(nota : ao responderes correctamente a estas questões, tens directamente a solução ao teu problema)


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Stevenpereira

O valor MIN(A,X) ou MIN(B,Y) para todo o A > X e B > Y vai ser o X e o Y...

M e N no seu limite superior só podem tomar valores menores ou igual que o tamanho da matriz

Nao...por exemplo, se a matriz tiver 10x6, o 10 e o 6 já são números inválidos....mas o que acontece é :

supondo que estamos na linha 5 e o numero de vizinhos é 1

m <= MIN ( 5+1, 10) -> ou seja, ele vai ter que ir verificar da linha 5 á 6 inclusivé, mas não pode tomar o valor de 10

para tentar resolver isto, já fiz isto m <= MIN ( 5+1, 10-1)--->para tentar que a linha fosse até apenas á 9, e fiz o mesmo para as colunas, mas n funciona como eu desejava :P

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.