Ver Mensaje Individual
  #7 (permalink)  
Antiguo 09/02/2014, 05:03
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 2 meses
Puntos: 83
Respuesta: Error al guardar arreglo bidimensional en unidimensional

@CalgaryCorpus: "...Una pista..."

Otra pista :)) Haz el bucle donde asignas los valores de 'ma' a 'v' con palel y lapiz para ver en que posiciones guardas:

Código C:
Ver original
  1. for (i=0;i<5;i++) {
  2.     for (j=0;j<5;j++) {
  3.         v[i]=ma[i][j];
  4.     }
  5. }

No obstante puede que te resulte mas atractivo algoritmo de los videojuegos (aplicable en muchos casos):

Código C:
Ver original
  1. posicion lineal = (ancho matriz * posicion y) + posicion x


Código C:
Ver original
  1. #define W 5
  2. #define H 5
  3.  
  4. int x, y, offset;
  5. for(y = 0; y < H; y++) {
  6.     for(x = 0; x < W; x++) {
  7.         offset = (W * y) + x;
  8.         v[offset] = ma[y][x];
  9.     }
  10. }

Solo una observacion, en este caso estoy leyendo de derecha a izquierda y de arriba a abajo, por eso recojo los valores con las posiciones cambiadas ma[y][x]

Esto te deja el array bidimensional como lineal; de esta forma puedes acceder a cualquier posicion del array lineal para lectura i/o escritura sabiendo las coordenadas que ocuparia en la matriz:

Código C:
Ver original
  1. (3x3)
  2. 0 1 2
  3. 3 4 5
  4. 6 7 8
  5.  
  6. P.ej. la posicion 5 = columna 2, fila 1 -> offset = (3 * 1) + 2

Espero que te sea de ayuda
Saludos
vosk