49. C++ || Arrays bidimensionales




Lo que hemos visto hasta ahora se conoce como arrays unidimensionales que como su nombre lo indica, son de una dimensión. Estos tienen sólo un índice y también son conocidos como listas.

Ahora veremos los arrays bidimensionales (dos dimensiones) y que por consiguiente tendrán dos índices. Este tipo de array es bastante usado y también se conocen como tabla o matriz. Sin embargo, nosotros podemos crear un array con tantas dimensiones como queramos y de esta manera hacer un array multidimensional. Estos últimos no son tan usuales y por ello no los veremos a fondo, nos vamos a concentrar en las tablas o matrices.

Una representación gráfica de los array de una sola dimensión con los valores 7, 9, 1, 0, 12, 50 se vería de la siguiente manera:


Ahora, una array con dos dimensiones tiene una estructura diferente, donde debemos tomar en cuenta las filas y las columnas. Por ejemplo, creamos un array de nombre matriz y lo declaramos con las siguientes dimensiones:

int matriz[4][3];

En este arreglo podemos ingresar números de tipo entero, pero ya no será una lista. Ahora hay que tomar en cuenta que el máximo de sus elementos viene dado por la multiplicación de la fila y la columna, donde el 4 representa las filas, y el 3 las columnas.

4x3 = 12 que es el número máximo de elementos que podremos agregar en el array. Y su representación gráfica es la siguiente:


Claramente se puede apreciar por qué también se conoce como tabla o matriz. Ahora que ya tenemos la noción de qué es un array bidimensional, toca manipularlo como habíamos hecho anteriormente con los de una dimensión.

Para referenciar los arrays bidimensionales los haremos como si fuesen las coordenadas (x,y) del plano cartesiano. Primero declaramos el array:

tipo nombreArray [numeroDeFilas] [numeroDeColumnas];

Donde:

  • Tipo. Es cualquier tipo de dato, bien sea uno proporcionado por C++, o uno creado por el usuario con una estructura o una clase.
  • nombreArray. Es cualquier nombre permitido por C++ que se le quiera poner al array.
  • numeroDeFilas. Es la cantidad máxima de filas que tendrá el array.
  • numeroDeColumnas. Es la cantidad máxima de columnas que tendrá el array.

Y la cantidad máxima de elementos que almacenará el array viene dada por la formula:

cantidadMaxima = numeroDeFilas x numeroDeColumnas

Las siguientes son algunas declaraciones correctas de una array bidimensional:

char lista[5][5];
int estudiantes[3][25];
float ingresos[10][5];
int matriz[4][3];

Nota: Es muy importante que cada dimensión del array esté encerrada dentro de corchetes. Lo siguiente produciría un error:

int errorArray[25, 10];

No es válido.

Un array bidimensional se puede ver como un array unidimensional puesto sobre otro sucesivamente.

Inicialización de array bidimensionales


Al igual que los arrays unidimensionales, los arrays bidimensionales se pueden inicializar al momento de ser declarados. La inicialización consta de una lista constante separadas por comas y encerradas dentro de llaves. Ejemplo:

int ejemploArryaBidimensional [2][3] = {1, 2, 3, 7, 8, 9};

O también se pueden inicializar de las siguientes maneras:

int ejemploArryaBidimensional [2][3] = { {1,2,3},{7,8,9} };

int ejemploArryaBidimensional [2][3] = {
                                        {1,2,3},
                                        {7,8,9}
                                       };

int ejemploArryaBidimensional [2][3] = { {1,2,3},
                                        {7,8,9} };

Acceso a los elementos de un array bidimensional


Para acceder a los elementos de un array bidimensional seguimos los mismo pasos que con los arrays unidimensionales con la diferencia de que ahora hay que especificar los índices de la fila y la columna. La asignación directa de valores a los elementos es:

Inserción de elementos

nombre del Array[índice de fila] [índice de columna] = valor del elemento;

Extracción de elementos

variable = nombre del Array[índice de fila] [índice de columna];

Ejemplos de inserción de elementos

tabla[2][3] = 4.5;
estudiante[1][15] = 10;
asientosLibres[7][10];


Ejemplos de extracción de elementos

ventas = año[1][27];
dia = semana[3][6];
notas = estudiante[1][15];

Lectura y escritura de los elementos de arrays bidimensionales


Para esto usamos los objetos cin y cout que hemos visto hasta ahora. Por ejemplo, para leer datos:

cin>>estudiante[1][15];
cin>>ventas[3][2];
cin>>año[7][22];

Y para mostrar datos en pantalla:

cout<<gtestudiante[1][15];
cout<<ventas[3][2];
cout<<año[7][22];

Acceso a los elementos de un array bidimensional con bucles


La forma más común y eficaz de leer o mostrar elementos de un array bidimensional es utilizando bucles anidados. La sintaxis general es:

for(int indiceFila = 0; indiceFila < numeroDeFilas; indiceFila++){
  for(int indiceColumna = 0; indiceColumna < numeroDeColumnas; indiceColumna++){
   //Procesar los elementos del array
   ejemploArryaBidimensional[indiceFila][indiceColumna]; // cin o cout 
  }
 }

Veamos un ejemplo para finalizar donde vamos a ingresar datos en un array y luego los vamos a mostrar en pantalla.

#include <iostream>
using namespace std;

int main(){
 float ventas[2][3];
 int fila, columna;
 for(fila = 0; fila < 2; fila++){
  for(columna = 0; columna &l 3; columna++){
   cin>>ventas[fila][columna];
  }
 }
 for(fila = 0; fila < 2; fila++){
  for(columna = 0; columna &l 3; columna++){
   cout<<ventas[fila][columna]<<endl;
  }
 }
 return 0;
}


7 comentarios:

  1. LLene dos vectores de 10 elementos de tipo entero. Realice la suma del primer elemento del vector A con le primer elemento del vector B, y así hasta llegar al último elelemto de los dos arreglos y guarde el resulado en una Matriz 20 por 20. Imprimir el resultado.....Alguien me ayuda por favor

    ResponderEliminar
    Respuestas
    1. matriz de 20 x 20? para que si solo te daran 20 resultados, osea minimo una matriz de 4x5

      Eliminar
    2. int matz1[10],matz2[10],suma[10];
      cout<<" \n Llenando el vector 1"< ";cin>>matz1[i];
      }
      cout<<" \n Llenando el vector 2"< ";cin>>matz2[i];
      }
      cout<<" Mostrando la suma de los vectores: "<<endl;
      for (int i=0;i<10;i++){
      fflush(stdin);
      suma[i] = matz1[i] + matz2[i];
      }
      for (int i=0;i<10;i++){
      cout<<"matz1["<<i<<"] + matz2["<<i<<"] = ["<<suma[i]<<"]"<<endl;
      }
      getch();
      return 0;

      Eliminar
  2. no se puede pasar bien no se por que

    ResponderEliminar
  3. Usar la tabla siguiente y escribir los algoritmos para cada caso:  
      Articulo

    Articulo
    1  
    Articulo

    Articulo
    3     NAE  
    Almacen 0   30 50 0 25   105
    Almacen 1   0 29 20 65   114
    Almacen 2   10 0 17 45   72

      a)   Calcular que artículos están agotados en el almacén 1.
     b) En cualquiera de los almacenes, cual es el artículo que esta agotado (debe indicar el
    número de almacén y del artículo)
    ayuda porfa

    ResponderEliminar
  4. Represente una Persona con sus nombres y apellidos, ingrese 5 personas en un arreglo y verifique cuales de ellas son Homónimas (Personas diferentes que tienen exactamente los mismos nombres y apellidos) talvez un programa en c++

    ResponderEliminar
  5. Hola me podrias ayudar con este ejercicio lo he estado haciendo pero solo me imprime la matriz, necesito codificar un programa que dada una matriz [m][n] la almacene en :
    a) un vector1 de la forma[fila1,fila2,fila3...]
    b)un vector2 de la forma [columna1,columna2,columna3...]
    por ejemplo:
    7 8 9
    4 5 2
    1 0 8
    vector1=[7,8,9,4,5,2,1,0,8]
    vector2=[7,4,1,8,5,0,9,2,8]

    ResponderEliminar