Introducción
Una matriz bidimensional en C++ es la forma más simple de una matriz multidimensional. Se puede visualizar como una matriz de matrices. La siguiente imagen muestra una matriz bidimensional.
Una matriz bidimensional también se denomina matriz . Puede ser de cualquier tipo, como entero, carácter, punto flotante, etc., según la inicialización. En la siguiente sección, analizaremos cómo podemos inicializar matrices 2D.
Inicialización de una matriz 2D en C++
Entonces, ¿cómo inicializamos una matriz bidimensional en C++? Es tan simple como esto:
int arr[4][2] = {{1234, 56},{1212, 33},{1434, 80},{1312, 78}} ;
Como puede ver, inicializamos una matriz 2D arrcon 4 filas y 2 columnas como una matriz de matrices. Cada elemento de la matriz es, a su vez, una matriz de números enteros.
También podemos inicializar una matriz 2D de la siguiente manera.
int arr[4][2] = {1234, 56, 1212, 33, 1434, 80, 1312, 78};
También en este caso arrse trata de una matriz 2D con 4 filas y 2 columnas.
Impresión de una matriz 2D en C++
Hemos terminado de inicializar una matriz 2D, ahora sin imprimirla realmente, no podemos confirmar que se hizo correctamente.
Además, en muchos casos, es posible que necesitemos imprimir una matriz 2D resultante después de realizar algunas operaciones en ella. ¿Cómo lo hacemos?
El código a continuación nos muestra cómo podemos hacerlo.
#includeiostreamusing namespace std; main( ) { int arr[4][2] = {{ 10, 11 },{ 20, 21 },{ 30, 31 },{ 40, 41 }} ;int i,j;cout"Printing a 2D Array:n";for(i=0;i4;i++){for(j=0;j2;j++){cout"t"arr[i][j];}coutendl;}}
Producción :
En el código anterior,
- Primero inicializamos una matriz 2D,
arr[4][2]con ciertos valores, - Después de eso, intentamos imprimir la matriz respectiva usando dos bucles for,
- El bucle for externo itera sobre las filas, mientras que el interno itera sobre las columnas de la matriz 2D.
- Por lo tanto, en cada iteración del bucle externo,
iaumenta y nos lleva a la siguiente matriz unidimensional. Además, el bucle interno recorre toda la matriz unidimensional a la vez. - Y en consecuencia, imprimimos el elemento individual
arr[ i ][ j ].
Tomar elementos de una matriz 2D como entrada del usuario
Anteriormente, vimos cómo podemos inicializar una matriz 2D con valores predefinidos. Pero también podemos convertirla en una entrada de usuario . Veamos cómo
#includeiostreamusing namespace std; main( ) { int s[2][2]; int i, j; cout"n2D Array Input:n"; for(i=0;i2;i++) { for(j=0;j2;j++) { cout"ns["i"]["j"]= "; cins[i][j];} } cout"nThe 2-D Array is:n"; for(i=0;i2;i++) { for(j=0;j2;j++) { cout"t"s[i][j];}coutendl; } }
Producción :
Para el código anterior, declaramos una matriz 2D 2X2s . Mediante dos bucles for anidados, recorremos cada elemento de la matriz y tomamos las entradas de usuario correspondientes. De esta manera, se completa toda la matriz y la imprimimos para ver los resultados.
Suma de matrices mediante matrices bidimensionales en C++
A modo de ejemplo, veamos cómo podemos utilizar matrices 2D para realizar la suma de matrices e imprimir el resultado.
#includeiostreamusing namespace std; main() { int m1[5][5], m2[5][5], m3[5][5]; int i, j, r, c; cout"Enter the no.of rows of the matrices to be added(max 5):"; cinr; cout"Enter the no.of columns of the matrices to be added(max 5):"; cinc; cout"n1st Matrix Input:n"; for(i=0;ir;i++) { for(j=0;jc;j++) { cout"nmatrix1["i"]["j"]= "; cinm1[i][j];} } cout"n2nd Matrix Input:n"; for(i=0;ir;i++) { for(j=0;jc;j++) { cout"nmatrix2["i"]["j"]= "; cinm2[i][j];} } cout"nAdding Matrices...n"; for(i=0;ir;i++) { for(j=0;jc;j++) { m3[i][j]=m1[i][j]+m2[i][j];} } cout"nThe resultant Matrix is:n"; for(i=0;ir;i++) { for(j=0;jc;j++) { cout"t"m3[i][j];}coutendl; } }
Producción :
Aquí,
- Tomamos dos matrices
m1ym2con un máximo de 5 filas y 5 columnas. Y otra matrizm3en la que vamos a almacenar el resultado, - Como entrada del usuario, tomamos la cantidad de filas y columnas para ambas matrices. Dado que estamos realizando una suma de matrices, la cantidad de filas y columnas debe ser la misma para ambas matrices.
- Después de eso, tomamos ambas matrices como entradas del usuario, nuevamente utilizando bucles for anidados,
- En este punto, tenemos ambas matrices m1 y m2 ,
- Luego recorremos la matriz m3 , utilizando dos bucles for y actualizamos los elementos respectivos
m3[ i ][ j ]con el valor dem1[i][j]+m2[i][j]. De esta manera, al final del bucle for externo, obtenemos la matriz deseada, - Por último, imprimimos la matriz resultante m3.
Puntero a una matriz 2D en C++
Si podemos tener un puntero a un entero, un puntero a un flotante, un puntero a un carácter, ¿no podemos tener un puntero a una matriz? Por supuesto que podemos. El siguiente programa muestra cómo crearlo y usarlo.
#includeiostreamusing namespace std;/* Usage of pointer to an array */ main( ) { int s[5][2] = { {1, 2}, {1, 2}, {1, 2}, {1, 2} } ; int (*p)[2] ; int i, j; for (i = 0 ; i = 3 ; i++) { p=s[i]; cout"Row"i":"; for (j = 0; j = 1; j++) cout"t"*(*p+j); coutendl; } }
Producción :
Aquí,
- En el código anterior, intentamos imprimir una matriz 2D usando punteros,
- Como hicimos antes, primero inicializamos la matriz 2D,
s[5][2]. Y también un puntero(*p)[2], donde p es un puntero que almacena la dirección de una matriz con 2 elementos, - Como ya dijimos, podemos descomponer una matriz 2D en una matriz de matrices. Por lo tanto, en este caso, s es en realidad una matriz con 5 elementos, que a su vez son matrices con 2 elementos por cada fila.
- Usamos un
forbucle para recorrer estos 5 elementos de la matriz, s . Para cada iteración, asignamos p con la dirección des[i], - Además, el bucle for interno imprime los elementos individuales de la matriz s[i] utilizando el puntero p . Aquí,
(*p + j)nos da la dirección del elemento individual s[i][j], por lo que utilizando*(*p+j)podemos acceder al valor correspondiente.
Pasar una matriz 2D a una función
En esta sección, aprenderemos a pasar una matriz 2D a cualquier función y acceder a los elementos correspondientes. En el código siguiente, pasamos la matriz a a dos funciones show()y print()que imprime la matriz 2D pasada.
#includeiostreamusing namespace std; void show(int (*q)[4], int row, int col){int i, j ;for(i=0;irow;i++){for(j=0;jcol;j++) cout"t"*(*(q + i)+j); cout"n";} cout"n";} void print(int q[][4], int row, int col){ int i, j; for(i=0;irow;i++) { for(j=0;jcol;j++) cout"t"q[i][j]; cout"n";} cout"n";} int main() { int a[3][4] = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21} ; show (a, 3, 4); print (a, 3, 4); return 0;}
Producción :
Aquí,
- En la
show( )función hemos definido q como un puntero a una matriz de 4 enteros a través de la declaraciónint (*q)[4], - q contiene la dirección base de la matriz 1-D cero
- Luego, esta dirección se asigna a q , un puntero int, y luego, utilizando este puntero, se accede a todos los elementos de la matriz 1D cero.
- La próxima vez que pasemos por el bucle, cuando
itome el valor 1 , la expresión q+i obtendrá la dirección de la primera matriz unidimensional. Esto se debe a que q es un puntero a la matriz unidimensional cero y si le sumamos 1 obtendremos la dirección de la siguiente matriz unidimensional. Esta dirección se asigna nuevamente a q y, al usarla, se accede a todos los elementos de la siguiente matriz unidimensional. - En la segunda función
print(), la declaración de q se ve asíint q[][4]: - Esto es lo mismo que int (*q )[4] , donde q es un puntero a una matriz de 4 números enteros. La única ventaja es que ahora podemos usar la expresión más familiar
q[i][j]para acceder a los elementos de la matriz. Podríamos haber usado la misma expresión enshow()también, pero para comprender mejor el uso de punteros, usamos punteros para acceder a cada elemento.
Conclusión
En este artículo, analizamos las matrices bidimensionales en C++ , cómo podemos realizar varias operaciones y su aplicación en la suma de matrices. Si tienes más preguntas, no dudes en utilizar los comentarios.
Referencias
- https://en.wikipedia.org/wiki/Array_data_structure
- /comunidad/tutoriales/matrices-en-c