Matrices Matriz Una matriz es una estructura de datos que permite almacenar una colección de elementos, todos del mismo tipo. La diferencia con los vectores está en que, en las matrices, los elementos no están organizados linealmente, sino que su organización es bidimensional, es decir, en filas y columnas. A modo de ejemplo, la siguiente matriz (denominada M) posee 25 celdas, distribuidas en 5 columnas y 5 filas. Cada celda de la matriz es identificada por 2 índices (valores enteros) que comienzan en [0,0]. 0 1 2 3 4 0 -12 345 0 -4 45 1 3 23 45 67 89 2 26 12 78 23 67 3 49 0 45 890 9067 4 500 -1 0 56 -3 De esta manera, si deseamos referirnos a una celda ubicada en la tercera fila y tercera columna de la matriz M, lo indicamos como M[3,3]. Nótese que todos los elementos de la matriz son del mismo tipo de dato (en este caso, entero) por lo que la matriz M es de tipo entero. El primer elemento de la matriz es M[0,0] y el último es M[4,4]. El tamaño de una matriz corresponde al número de celdas que lo conforman. En el caso anterior, el tamaño es de 25 (5x5). Una característica importante de una matriz cuadrada (aquella que tiene igual número de filas y columnas), son sus diagonales (principal y secundaria). Por ejemplo, en la matriz anterior, la diagonal principal queda definida por las celdas: M[0,0], M[1,1], M[2,2], M[3,3], M[4,4]; y la diagonal secundaria queda definida por las celdas: M[0,4], M[1,3], M[2,2], M[3,1], M[4,0]. Sobre las celdas de una matriz, se pueden realizar todas las operaciones que permitan sus elementos. Por ejemplo, si deseamos obtener la suma de los elementos de la diagonal principal de la matriz M antes descrita, entonces se puede escribir: M[0,0]+M[1,1]+M[2,2]+M[3,3]+M[4,4]. Una matriz puede tener diferentes números de filas y columnas. Por ejemplo, una matriz P puede ser definida con 10 columnas y 6 filas. En este caso, no se aplica la definición de diagonal. Declaración de una matriz En lenguaje C, una matriz se declara como: tipo nombre_matriz[cant_filas][cant_columnas]; Por ejemplo, una matriz x (de enteros) de 2 filas y 3 columnas se declara como: int x[2][3]; Si deseamos almacenar los números 23, 34, 500, 11, 0 y 9001 (en ese mismo orden), quedaría algo como: 0 1 2 0 23 34 500 1 11 0 9001 Otros ejemplos: int m[3][3]; float n[3][5]; double o[6][2]; Llenado de una matriz Por ejemplo, si tenemos la siguiente matriz: int m[3][4]; Para llenarla, podemos hacerlo de dos maneras distintas: 1.- Casilla por casilla m[0][0]=120; m[0][1]=23; ⋮ m[2][2]=-89; m[2][3]=365; 2.- Utilizando sentencias iterativas int i=0, j=0, dato; while(i<3) { while(j<4) { printf(“Ingrese dato: ”); scanf(“%d”, &dato); m[i][j]=dato; j++; } i++; } int i, j, dato; for(i=0; i<3; i++) { for(j=0; j<4; j++) { printf(“Ingrese dato: ”); scanf(“%d”, &dato); m[i][j]=dato; } } Nótese que los dos métodos de llenado (while y for) hacen exactamente lo mismo. Ejemplos 1.- Escriba un algoritmo en C que almacene datos de tipo entero en una matriz de 𝑛 filas y 𝑚 columnas (tanto el número de filas y columnas como los datos que se almacenarán, se deben pedir por pantalla). int main() { int n, m, i, j, dato; printf(“Ingrese numero de filas: ”); scanf(“%d”, &n); printf(“Ingrese numero de columnas: ”); scanf(“%d”, &m); int a[n][m]; for(i=0; i<n; i++) { for(j=0; j<m; j++) { printf(“Ingrese dato: ”); scanf(“%d”, &dato); a[i][j]=dato; } } } 2.- Escriba un algoritmo en C que dada una matriz llena de 𝑛 filas y 𝑚 columnas, muestre por pantalla todos sus elementos (la matriz es de tipo entero). int main() { ⋮ for(i=0; i<n; i++) { for(j=0; j<m; j++) { printf(“%d\t”, a[i][j]); } printf(“\n”); } } 3.- Escriba un algoritmo en C que dada una matriz llena de 𝑛 filas y 𝑚 columnas, calcule la suma de todos sus elementos (la matriz es de tipo entero). int main() { ⋮ int sum=0; for(i=0; i<n; i++) { for(j=0; j<m; j++) { sum+=a[i][j]; } } } Ejercicios propuestos 1.- Escriba un algoritmo en C que dada una matriz llena de 𝑛 filas y 𝑚 columnas, determine cuantos elementos son pares y cuantos son impares (la matriz es de tipo entero). 2.- Escriba un algoritmo en C que dada una matriz cuadrada llena de 𝑛 filas y 𝑚 columnas (donde 𝑛 = 𝑚), calcule la suma de todos los elementos que se encuentran en la diagonal principal (la matriz es de tipo entero). 3.- Escriba un algoritmo en C que dada una matriz cuadrada llena de 𝑛 filas y 𝑚 columnas, calcule la suma de todos los elementos que se encuentran en la diagonal secundaria (la matriz es de tipo float).