Tutorial de programación en C para Linux Parte 24 – Matrices multidimensionales

Si estás siguiendo esta serie de tutoriales de programación en C, conocerás el concepto de matrices. Para refrescarlo rápidamente, las matrices se utilizan para almacenar múltiples valores del mismo tipo en un almacenamiento continuo.

Matrices multidimensionales en C

Por ejemplo, la siguiente es una matriz de enteros capaz de almacenar 5 números.

int arr[5]

Se puede acceder fácilmente a cualquier valor almacenado en una matriz utilizando el nombre de la matriz y el valor del índice correspondiente. Como los índices empiezan por 0, digamos que si quieres acceder al segundo elemento de una matriz, puedes hacerlo de la siguiente manera:

arr[1]

El siguiente programa acepta 5 enteros del usuario como entrada, los almacena en un array y luego los devuelve al usuario.

#include <stdio.h>

int main()
{
int arr[5],i;

printf("Enter 5 integer values\n");

for(i=0;i<5;i++)
scanf("%d",&(arr[i]));

printf("You entered the following values:\n");

for(i=0;i<5;i++)
printf("%d\n",arr[i]);


return 0;
}

Ahora bien, este tipo de matriz se conoce como matriz unidimensional. Sí, eso significa que también existen matrices multidimensionales: matrices bidimensionales, matrices tridimensionales, etc. Por ejemplo, la siguiente es una matriz bidimensional:

int arr[2][3]

Puedes visualizar esta matriz como una tabla bidimensional de números con 2 filas y 3 columnas, algo así como lo siguiente:

x x x
x x x 

Así que hay un total de 6 elementos que este array puede contener. Cabe mencionar que el número total de elementos que puede contener un array se puede calcular fácilmente multiplicando los índices en la declaración del array. Por ejemplo, en el caso de 'arr', la capacidad de la matriz se puede calcular haciendo 2x3, que es igual a 6.

Pasando a la parte de la inicialización, una matriz bidimensional como 'arr' se puede inicializar de la siguiente manera:

int arr [2][3] = {1,2,3,4,5,6}

Como esta inicialización anterior dificulta la visualización de estos valores en una matriz 2D, hay otra forma (léase: mejor) por la que puedes optar. Aquí la tienes:

int arr [2][3] = { {1,2,3}, {4,5,6} };

Así que ahora es fácil visualizar que los números 1,2,3 están en una fila, mientras que 4,5,6 están en la otra. Aquí tienes:

1 2 3
4 5 6

En cuanto a cómo tratar una matriz bidimensional en C, lo siguiente es un pequeño programa que acepta estos 6 valores del usuario, los almacena en una matriz bidimensional 'arr', y finalmente los devuelve al usuario:

#include <stdio.h>

int main()
{
int arr[2][3],i,j;

printf("You are about to enter values for a 2x3 array\n");

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("\n Enter value to be stored at row %d and column %d :: ",i,j);
scanf("%d",&arr[i][j]);
}
}


printf("\n You entered the following values:\n");

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("\n Row %d and column %d = %d\n",i,j,arr[i][j]);
}
}


return 0;
}

Y aquí está la salida:

You are about to enter values for a 2x3 array 

Enter value to be stored at row 0 and column 0 :: 1

Enter value to be stored at row 0 and column 1 :: 2

Enter value to be stored at row 0 and column 2 :: 3

Enter value to be stored at row 1 and column 0 :: 4

Enter value to be stored at row 1 and column 1 :: 5

Enter value to be stored at row 1 and column 2 :: 6


You entered the following values:

Row 0 and column 0 = 1

Row 0 and column 1 = 2

Row 0 and column 2 = 3

Row 1 and column 0 = 4

Row 1 and column 1 = 5

Row 1 and column 2 = 6

Esto es información básica sobre las matrices bidimensionales. ¿Qué pasa con las matrices tridimensionales? Bueno, en la misma línea, también puedes definir e inicializar matrices tridimensionales. Aquí tienes un ejemplo:

int arr[2][3][4]

¿Cómo se puede visualizar esta matriz? Bien, piensa en un mundo tridimensional (el mundo en el que vivimos), y luego visualiza tres dimensiones perpendiculares entre sí. Así es como encajan las tres dimensiones de esta matriz.

Con una capacidad de 24 elementos (2x3x4), esta matriz se puede inicializar de la siguiente manera:

int x[2][3][4] = 
 { 
   { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} },
   { {13,14,15,16}, {17,18,19,20}, {21,22,23,24} }
 };

Y aquí tienes un programa en C que utiliza una matriz tridimensional:

#include <stdio.h>

int main()
{
int arr[2][3][4],i,j,k;

printf("You are about to enter values for a 2x3x4 array\n");

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
printf("\n Enter value to be stored at arr[%d][%d][%d] :: ",i,j,k);
scanf("%d",&arr[i][j][k]);
}
}
}


printf("\n You entered the following values:\n");

for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
for(k=0;k<4;k++)
{
printf("\n arr[%d][%d][%d] = %d\n",i,j,k,arr[i][j][k]);
}
}
}


return 0;
}

Conclusión

En este tutorial, hemos ampliado nuestros conocimientos sobre las matrices con el concepto de matrices multidimensionales. Te aconsejamos que pruebes en tu sistema los ejemplos utilizados en este tutorial (así como que crees otros nuevos) para comprender mejor el funcionamiento de estas matrices. En caso de cualquier duda o consulta, deja un comentario a continuación.

También te podría gustar...