50. C++ || Arrays multidimensionales




Habíamos dicho que no nos íbamos a enfocar en los arrays de más dimensiones, o sea, array multidimensionales. Así que en este apartado revisaremos un poco este caso sólo para tenerlo en cuenta.

Un array multidimensional es aquel con n dimensiones que representa una estructura bastante abstracta, por eso hablaremos de los de tres dimensiones. Para imaginar esto, piensen en un cubo de Rubik, mientras que un array bidimensional se puede representar como una matriz, donde se puede acceder a sus elementos como si fuesen las coordenadas x e y del plano cartesiano, los arrays con tres dimensiones se manejan con un tercer eje, el eje z.


En este caso no sólo debemos tomar en cuenta las filas y columnas, si no también, la profundidad. Tal cual como un cubo, uno de Rubik para verlo mejor. Debemos imaginar que cada cuadro que tiene el cubo de Rubik, es un elemento del array, y para acceder al él lo haríamos con unas coordenadas parecidas a las siguientes:

(x, y, z)

Un ejemplo típico que se utiliza para explicar los arrays de tres dimensiones es el modelo de un libro, donde podemos ver cada página como un array bidimensional, las líneas conforman las filas, y los caracteres que se escriben representan las columnas. Así, por ejemplo, si cada página tiene 45 líneas (filas), y 80 caracteres por línea (formando así las columnas), entonces si el libro tiene 500 páginas (profundidad o el eje z), existiría 500 planos y el número de elementos que contendrá el array será dado por la multiplicación de todos su índices, en este caso 45 x 80 x 500 = 1 800 000.

Array de tres dimensiones


Declaración de un array de tres dimensiones:

char libro [45] [80] [500]; // libro [x] [y] [z] coordenadas (x, y, z) del plano cartesiano

Asignación de datos en un array de tres dimensiones:

Recordando el plano cartesiano con los ejes x, y y z. Se haría de la siguiente manera:

libro [0] [0] [0] = 'H';
libro [0] [1] [0] = 'a';
libro [0] [2] [0] = 'b';
libro [0] [3] [0] = 'i';
libro [0] [4] [0] = 'a';
libro [0] [5] [0] = ' ';
libro [0] [6] [0] = 'u';
libro [0] [7] [0] = 'n';
libro [0] [8] [0] = 'a';
libro [0] [9] [0] =  ' ';
libro [0] [10] [0] = 'v';
libro [0] [11] [0] = 'e';
libro [0] [12] [0] = 'z';
libro [0] [13] [0] = '.';
libro [0] [14] [0] = '.';
libro [0] [15] [0] = '.';


Fíjense que sólo cambiamos la posición de la columna en el eje y. Esto se debe a que en nuestro libro, que comienza con la frase “Había una vez...”, queremos escribir en la misma línea, por eso la fila se mantiene en 0, al igual que la página. Si moviéramos el eje x, entonces haríamos un salto de línea, y si movemos el eje z, cambiamos de página.

Agregar datos a un array con tres dimensiones:

Se hace con el objeto cin, accediendo a los elementos como se ha hecho hasta ahora.

cin>>libro [0] [0] [0];
cin>>libro [0] [1] [0];
cin>>libro [0] [2] [0];
cin>>libro [0] [3] [0];
cin>>libro [0] [4] [0];

Mostrar datos de un array con tres dimensiones:

Se hace con el objeto cout, accediendo a los elementos como se ha hecho hasta ahora.

cout<<libro [0] [0] [0];
cout<<libro [0] [1] [0];
cout<<libro [0] [2] [0];
cout<<libro [0] [3] [0];
cout<<libro [0] [4] [0];

Usando bucles for:

La forma más elegante de hacer este tipo de cosas en los array es por medio de bucles for anidados. Su implementación es la siguiente:

Primero declarar el array libro de tres dimensiones.

char libro [45] [80] [500];

Recordando que el eje z se trata de las páginas que contiene el libro, naturalmente vamos a querer escribir en él y no pasar de página si no hasta haber llenado por completo en la que estamos. Dicho esto, y sabiendo que vamos a usar tres bucles for para ingresar los datos, debemos tener en claro que el primer bucle estará controlado por el eje z, las páginas. Luego por las filas y terminamos con las columnas. Ejemplo:

int fila = 45;
int columna = 80;
int paginas = 500;
int i, j, k;
char libro [fila] [columna] [paginas];

for(k = 0; k < paginas; k++){
 for(i = 0; i < fila; i++){
  for(j = 0; j < columna; j++){
   cin>>libro[i] [j] [k];
  }
 }
}

//Y para mostrar datos.

for(k = 0; k < paginas; k++){
 for(i = 0; i < fila; i++){
  for(j = 0; j < columna; j++){
   cout<<libro[i] [j] [k];
  }
 }
}

2 comentarios:

  1. Muchas gracias, me ha servido demasiado, excelente explicación :D

    ResponderEliminar
  2. Excelente aporte, pero el código de explicacion no funciona, debido a que los valores para char libro [fila] [columna] [paginas]; seria un conflicto.

    ResponderEliminar