Percorrer parte de uma matriz em C

The WolfMan

1st Folding then Sex
Estou aqui com um problema que ando há que tempos para resolver. Tenho uma matriz de dimensões m*n e dado uma coordenada (i,j) e um tamanho pretendo imprimir os números da "sub matriz".

Código:
int sub_matrix(int * map, int * header_values) {
  int step_limit = 0;
  int sweep = 0;
  int i = 0, j = 0;
   
  step_limit = abs(header_values[4]);
   
  for (i = header_values[2]-step_limit; i <= header_values[2]+step_limit; i++) {
  for (j = header_values[3]-step_limit; j <= header_values[3]+step_limit; j++) {
  sweep = i * header_values[1] + j;
  printf("************%d************\n", map[sweep]);
  }
  }
   
  return 0;
}
map é a matriz que está armazenada em linha em memória, daí o "sweep = i * header_values[1] + j;" para "emular" a linha i e a coluna j da matriz.

header_values é um vector de 5 inteiros. Os dois primeiros indicam a dimensão da matriz, os outros 2 a posição do centro da matriz e o último inteiro é o offset desse ponto. Se for 2 por exemplo, pretendo imprimir todas os valores dentro do quadrado que se afasta 2 do centro.

Como é que eu estou a tentar fazer. Dado um ponto (i,j) e um offset k estou a andar k para a esquerda e k para cima e depois varro essa matriz. Mas só estou a obter valores parvos. Alguém tem sugestões?

Sei que pode haver pontos que não são da matriz, tudo a seu tempo.

No fim de escrever este post acho que me lembrei de algo, vou experimentar.
 
Problema resolvido!!!

Fica aqui a solução que achei:
Código:
int sub_matrix(int * map, int * header_values) {
  int step_limit = 0;
  int sweep = 0;
  int i = 0, j = 0;
   
  step_limit = abs(header_values[4]);
   
  for (i = header_values[2] - 1 - step_limit; i <= header_values[2] - 1 + step_limit; i++) {
  for (j = header_values[3] - 1 - step_limit; j <= header_values[3] - 1 + step_limit; j++) {
  sweep = i * header_values[1] + j;
  printf("************%d************\n", map[sweep]);
  }
  }
   
  return 0;
}

Na Álgebra uma matriz tem m linhas e n colunas em que m e n são maiores ou iguais a 1. Como no C os índices começam em 0, nas condições de início e fim de cada ciclo for subtraí um e já ficou tudo a funcionar. Tanto tempo perdido por causa disto :lol:

Isto agora é o código base para realizar várias operações na sub matriz.
 
Back
Topo