7/30/11 Objetivos de la sesión Entender el concepto de dimensión en un arreglo, sus posibles aplicaciones y su importancia. Conocer la forma en que se definen, crean y utilizan arreglos bidimensionales. Fundamentos de programación C#. R. Mtz. Dimensiones en un arreglo Los arreglos que se han manejado hasta ahora, se consideran de una dimensión (unidimensionales), pues los elementos se organizan linealmente. Sin embargo, se pueden trabajar más dimensiones, formando: ARREGLOS BIDIMENSIONALES (Matrices). ARREGLOS TRIDIMENSIONALES (Cubos). ARREGLOS de más dimensiones. Fundamentos de programación C#. Román Mtz. Fundamentos de programación C#. Román Mtz. ¿Cuándo utilizar más de una dimensión? La cantidad de dimensiones de un arreglo, dependerá de a cuántas características se quiere asociar un conjunto de datos. Ejemplo: Calificaciones Se asocian a alumnos. Se asocian a parciales. Se asocian a materias. Fundamentos de programación C#. Román Mtz. 1 7/30/11 Ejemplo: Calificaciones Ejemplo: Calificaciones alumno1 alumno1 alumno2 alumno2 alumno3 alumno3 alumno4 alumno4 alumno5 alumno5 alumno6 alumno6 alumno7 alumno7 … … alumnoX alumnoX Parcial1 Fundamentos de programación C#. Román Mtz. Final Arreglos bidimensionales alumno1 alumno2 alumno3 alumno4 alumno5 alumno6 alumno7 … alumnoX Fundamentos de programación C#. Román Mtz. Parcial3 Fundamentos de programación C#. Román Mtz. Ejemplo: Calificaciones Parcial1 Parcial2 Parcial2 Parcial3 Final Como se puede observar, es un arreglo de arreglos unidimensionales. Se puede manejar como un espacio matricial de renglones y columnas. Equivalente también a un plano cartesiano con posiciones (x,y). Materia1 Materia2 Matreia3 Materia4 Renglones Fundamentos de programación C#. Román Mtz. Columnas 2 7/30/11 Declaración de arreglos bidimensionales en C# Creación de arreglos bidimensionales en C# Las variables de tipo arreglo no se pueden utilizar hasta que haya sido creado el espacio en memoria para las mismas a través del operador new tipo[,] nombre; nombre = new tipo[#renglones, #columnas]; Tipo de dato de los elementos que conformarán el arreglo. Indicador de que la variable es un arreglo bidimensional Identificador de la variable que será un arreglo. Fundamentos de programación C#. Román Mtz. Identificador de la variable que se declaró como arreglo. Tipo de dato de los elementos que conformarán el Arreglo (congruente con la declaración realizada previamente). Valores que indican la cantidad de elementos a guardar en el arreglo. Fundamentos de programación C#. Román Mtz. Acceso a un arreglo bidimensional Ejemplo Formato: int[,] produccion = new int[5,12]; variable[renglón,columna] Variable que identifica al arreglo Subíndice que identifica al renglón a accesar Subíndice que identifica a la columna a accesar Los subíndices corresponden a una expresión de tipo entero cuyo valor puede ser desde 0 hasta la cantidad de reglones o columnas menos 1. Fundamentos de programación C#. Román Mtz. 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 produccion[2,4] produccion[1,9] Fundamentos de programación C#. Román Mtz. 3 7/30/11 ¿Cómo manejar información de las dimensiones? Inicialización de matrices con valores constantes Formato: tipo[,] nombre = {{valor1.1, valor1.2,…,valor1.N}, {valor2.1, valor2.2,…,valor2.N}, … {valorN.1, valorN.2,…,valorN.N}}; Indica cuántas dimensiones tiene un arreglo. Obtiene la cantidad de elementos que tiene el arreglo en la dimensión x. Ejemplo: matriz matriz.Rank // vale 2 matriz.GetLength(0) // vale 3 (cantidad de renglones) matriz.GetLength(1) // vale 2 (cantidad de columnas) Fundamentos de programación C#. Román Mtz. Generalizando el acceso… Generalizando el acceso… ¿Cómo se desplegaría la información del primer renglón? for (int col = 0; col < matriz.Getlength(1); col++) Console.WriteLine(matriz[0,col]); for (int reng=0; reng<matriz.GetLength(0); reng++) { for (int col=0; col<matriz.GetLength(1); col++) ¿Y del segundo renglón? for (int col = 0; col < matriz.Getlength(1); col++) Console.WriteLine(matriz[1,col]); Método GetLength(x) {{1, 2, 3}, 1 2 3 4 5 6 {4, 5, 6}, 7 8 9 {7, 8, 9}}; Fundamentos de programación C#. Román Mtz. int[,] matriz = {{1, 2}, {4, 5}, {7, 8}}; Ejemplo: Atributo Rank Crea un arreglo de tantos valores se especifiquen, asociando cada valor a cada casilla del arreglo según el orden dado. int[,] matriz = Console.Write(matriz[reng,col]+" "); Console.WriteLine(); } Entonces… ¿cómo desplegar toda la matriz? Fundamentos de programación C#. Román Mtz. Fundamentos de programación C#. Román Mtz. 4 7/30/11 CASO: Sumar todos los elementos de la matriz Generalizando el acceso… ¿Cómo se desplegaría la información de la primer columna? for (int reng=0; reng<matriz.GetLength(0); reng++) Console.WriteLine(matriz[reng,0]); ¿Y de la segunda columna? for (int reng=0; reng<matriz.GetLength(0); reng++) Console.WriteLine(matriz[reng,1]); En el encabezado del método se especifica el tipo de dato de la matriz. static int Suma (int[,] matriz) { int acum = 0; for (int r = 0; r < matriz.GetLength(0); r++) for (int c = 0; c < matriz.GetLength(1); c++) acum += matriz[r,c]; return acum; } Uso: x = Suma(m); En la llamada al método se pone solo el nombre de la variable que representa la matriz. Fundamentos de programación C#. Román Mtz. Fundamentos de programación C#. Román Mtz. Casos Sumar todos los elementos de una matriz Sumar dos matrices Sumar los elementos de una columna Sumar los elementos de un renglón Sumar los elementos de la diagonal principal Sumar los elementos de la diagonal secundaria Obtener la matriz transpuesta. Fundamentos de programación C#. Román Mtz. 5