Las matrices en C++, son vectores bidimensionales, aunque no necesariamente limitándose a esto, ya que pueden existir matrices de más dimensiones, sin embargo, no confundir con las reglas del álgebra linea donde las matrices solo pueden ser de 2 dimensiones, por tal motivo, entedamos que aquí estamos tratando el tema de las matrices desde un contexto de programación.
[ESTRUCTURA DE DATOS] ESTRUCTURA DE DATOS: MATRICES EN C++
Las matrices son estructuras de datos que nos permiten almacenar información en filas, columnas, datos en profundidad y más, sin embargo, en un cencepto básico y más común, diremos que las matrices generalmente serán usadas en vectores de 2 dimensiones, para esto, podemos revisar el siguiente post, donde se explica brevemente el tema de vectores: https://codideep.blogspot.com/2025/05/estructura-de-datos-arreglos-en-c.html.
Ejemplo claro de una matriz
En programación podemos decir que una matriz está compuesta por un sub-índice que representa una fila y otro que representa una columna (siempre que hablemos de matrices de 2x2), por ejemplo:
entonces, si ya tenemos lo anterior, como se vería esta matriz declarado y cargado con datos en C++, pues, veámoslo (considerar que si bien en este ejemplo estamos viendo matrices de enteros, sus elementos pueden variar de tipo de acuerdo a cómo lo declaremos inicialmente, es decir, podemos crear matrices de datos flotantes, caracteres, cadenas y más).
Una primera manera en que podríamos definir y cargar los datos con C++, para la matriz mostrada más arriba, sería la siguiente:
int m[][4] = {
{ 1, 7, 4, 2 },
{ 5, 6, 3, 3 },
{ 3, 2, 1, 1 },
{ 4, 5, 9, 3 }
};
La segunda forma, podría ser:
int m[4][4];
m[0][0] = 1;
m[0][1] = 7;
m[0][2] = 4;
m[0][3] = 2;
m[1][0] = 5;
m[1][1] = 6;
m[1][2] = 3;
m[1][3] = 3;
.
.
.
m[3][3] = 3;
Observemos cuidadosamente que en el primer caso, solo definimos el número de columnas, en el sub-índice de la declaración, mientras que en el segundo caso definimos tanto las filas como columnas, ya que la matriz está siendo declarada antes de siquiera asignarle los datos a esta, además, en la segunda forma tendríamos que cargar los datos, indicando la posición de cada elemento, uno por uno, hasta el final de todo.
En base a esto, puede surgir la duda ¿y cómo le asigno un valor a una posición determinada desde una entrada de datos por consola, y como imprimo un valor en específico? pues, respondiendo lo anterior, veamos la forma de asignarlo desde una entrada de datos y como imprimir un valor en específico (para este ejemplo, asignemos el valor 0 a la fila uno - columna 2 para luego imprimirlo en pantalla):
std::cin >> m[0][1];
std::cout << m[0][1];
Como podemos ver, es muy sencillo asignar y recuperar el valor de una matriz, entonces, hasta este punto ya sabemos como declarar, asignar datos, recuperar datos y reemplazar datos en una matriz.
Recorrido de una matriz
Para realizar el recorrido e imprimir todos los datos de una matriz, podemos hacerlo mediante el uso de 2 bucles for, de la siguiente manera (esto considerando que actualmente tenemos una matriz de 2 dimensiones):
for(unsigned int i = 0; i < sizeof(m)/sizeof(m[0]); i++) {
for(unsigned int j = 0; j < sizeof(m[0])/sizeof(int); j++) {
std::cout << m[i][j] << "\t";
}
std::cout << "\n";
}
Lo anterior, debería dar una salida como podemos ver seguidamente:
1 7 4 2
5 6 3 3
3 2 1 1
4 5 9 3
Realizado lo anterior, veamos que para recorrer los elementos de una matriz de 2 dimensiones, debemos iterar primero con sus filas, luego con sus columnas, haciendo un cálculo del número de filas y columnas de esta, a través del uso de la propiedad sizeof, además de un cálculo matemático simple del mismo (esto último se explica de mejor manera en el enlace proveido al incio de este post).
Operaciones con matrices
Si bien existen muchas operaciones que podemos hacer con matrices, veamos un ejemplo de algo muy sencillo como lo es la suma de matrices, para tal efecto, revisemos el código completo a continuación:
#include <iostream>
int main() {
int matrixOne[][4] = {
{ 1, 7, 4, 2 },
{ 5, 6, 3, 3 },
{ 3, 2, 1, 1 },
{ 4, 5, 9, 3 }
};
int matrixTwo[][4] = {
{ 2, 3, 4, 5 },
{ 2, 0, 1, 1 },
{ 3, 3, 1, 2 },
{ 1, 1, 1, 2 }
};
int matrixResult[4][4];
for(unsigned int i = 0; i < sizeof(matrixOne)/sizeof(matrixOne[0]); i++) {
for(unsigned int j = 0; j < sizeof(matrixOne[0])/sizeof(int); j++) {
matrixResult[i][j] = matrixOne[i][j] + matrixTwo[i][j];
}
}
for(unsigned int i = 0; i < sizeof(matrixResult)/sizeof(matrixResult[0]); i++) {
for(unsigned int j = 0; j < sizeof(matrixResult[0])/sizeof(int); j++) {
std::cout << matrixResult[i][j] << "\t";
}
std::cout << "\n";
}
return 0;
}
Observemos que en la primera parte declaramos 3 matrices, las 2 primeras, las que son sumadas, y, la tercera, donde se almacena el resultado de las sumas, entonces, ver cuidadosamente que las matrices deben ser de exactamente de la misma dimensión, esto debido a que aquello es una regla en matemáticas para realizar sumas entre matrices.
Posteriormente tenemos los bucles que recorren las filas y columnas de la matriz uno, pero como todas tienen la misma dimensión, podríamos tomar cualquier de estas como referencia, para realizar dicho recorrido; y, seguidamente, en cada operación, se hace la suma de cada uno de sus elementos para ser almacenados en la matriz resultante, específicamente en la misma posición de los valores sumados de la primera y segunda matriz.
Finalmente se muestra la matriz, como ya se había explicado en otro caso anterior. ¿Fácil? pues sí, bastante sencillo.
CONCLUSIÓN
Si bien en este post no abarcamos todo lo que conlleva una matriz, así como tampoco vemos todas las operaciones de matrices o al menos varios ejemplos de estos, lo que si vemos es una explicación general del comportamiento de una matriz en C++, además, al ser una matriz solo un vector de más de una dimensión, este ejemplo debería dejar muy claro el cómo usarlo a nivel de entrada, salida y operación con sus elementos.
Las matrices pueden ser muy útiles para almacenar datos, tratarlos, acceder a ellos y muchas otras operaciones que podemos realizar con estas, por lo tanto, podría hacerse una mención más importante a aquello, que si bien no veremos lo que se menciona a continuación en esta secuencia de publicaciones de estructura de datos, debemos saber que las matrices son estructuras muy usadas y relevantes en la ciencia de datos; por eso es importante aprenderlas para entenderlas y poder manipularlas según qué queramos hacer con dichos datos (incluso es muy usada en el campo de la inteligencia artificial, pero no vayamos más lejos, por ahora, enfoquémonos en entender el comportamiento básico de estas).
No hay comentarios:
Publicar un comentario