Array bidimensionales, multidimensionales (matrices) Un array multidimensional o matriz es aquella cuyos elementos se encuentran organizados en una estructura de varias dimensiones. Para definirlas se utiliza una sintaxis similar a la usada para declarar array unidimensionales pero separando las diferentes dimensiones mediante comas (,) Por ejemplo, una matriz multidimensional de elementos de tipo int que conste de 9 elementos puede tener sus elementos distribuidos en tres dimensiones formando una estructura 3x3, veamos como se ve esta matriz gráficamente. Columnas Filas 1 4 7 2 5 8 3 6 9 En la grafica vemos como se representa una matriz de tres filas x tres columnas. Como se declara una matriz. En realidad declarar o leer una matriz se puede hacer de muchas maneras, en este caso, describiremos la forma más habitual de inicializar una matriz. int [,] matriz=new int [,] {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; Si no queremos indicar explícitamente los elementos de la matriz al declararla, podemos obviarlos pero aún así indicar el tamaño de cada dimensión de la matriz (a los elementos se les daría el valor por defecto de su tipo de dato) así: int [,] matriz=new int [3, 3]; Como se imprime una matriz. Siguiendo con nuestro ejemplo de la matriz anterior de 3x3, el siguiente código permitirá ver en Csharp aplicación consola la salida de esta matriz. for(int i=0;i<3;i++) { for (int j=0; j<3; j++) { Console.Write(" {0} ",matriz[i,j]); } Console.WriteLine(); } Console.ReadLine(); Si nos detenemos un momento y observamos el anterior código, se aprecia que los subíndices de la matriz se inicializan en cero, esto debido a que como la matriz se a declarado como estática, es decir que los elementos fueron declarados en el programa y no son introducidos por el usuario mediante el teclado, por esta razón si iniciamos los ciclos for en uno, nos mostraría un error debido a esto. Veamos el programa completo que nos proporciona la salida anterior en pantalla. //Declaramos la matriz de 3x3 int[,] matriz = new int[,] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; //Definimos el titulo del programa Console.Title = "Ejemplo matrices de numeros enteros en CSharp"; //Imprimimos la matriz Console.WriteLine("\n"); for(int i=0;i<3;i++) { for (int j=0; j<3; j++) { Console.Write(" {0} ",matriz[i,j]); } Console.WriteLine(); } Console.ReadLine(); Ahora que ya conocemos como se declara e imprime una matriz, es el momento de realizar una serie de ejercicios, que nos permitan conocer mas de cerca los array bidimensionales, multidimensionales. Ejercicio 28: Hacer el diagrama y el programa que permita crear e imprimir la matriz identica. Solucion: La matriz identidad es aquella cuya diagonal principal esta formada de solamente números uno (1) o el resto de la matriz son solo ceros (0)... Veamos como se ve gráficamente una matriz idéntica de 4x4. 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 Variables de entrada de datos n= Variables que identifica al orden de la matriz. Variables de proceso Identica[i,j]= Matriz que almacenara unos en la diagonal principal y el resto de ceros. i, j = Variables subíndice de la matriz. Inicio n i= 1, n j= 1, n NO i=j identica [i, j] = 0 SI identica [i, j] = 1 Matriz identica [i, j] Fin PRIMERA PARTE: Aplicación Consola Nuevamente nos dirigimos al menú Archivo, Nuevo, Proyecto. Al hacerlo nos muestra la pantalla de nuevo proyecto, escogemos Visual C#, Aplicación consola, le damos el nombre al proyecto, en este caso “matriz_identica_consola”, luego aceptar, tal y como se muestra en la siguiente pantalla. Pantalla nuevo proyecto Visual csharp Después de esto tendremos la pantalla en donde podremos digitar el código correspondiente para el ejercicio que estamos trabajando. La pantalla es la siguiente. Pantalla proyecto matriz_identica_consola Visual csharp Nos ubicamos dentro de las llaves que encierran al método static void Main(string[] args) y digitamos el siguiente codigo. int n;//Indica el orden de la matriz int i, j;//Variables de los subindices de la matriz //Definimos el titulo del proyecto Console.Title = "Matriz Identica en CSharp"; Console.WriteLine("\n"); //Ingresamos el orden de la matriz Console.Write("Ingrese el orden de la matriz: "); n = int.Parse(Console.ReadLine()); //Declaramos la matriz de nxn int[,] identica = new int[n, n]; //Hacemos el llenado de la matriz identica for (i = 0; i <n; i++) { for (j =0; j <n; j++) { //Efectuamos la pregunta para llenarla de uno o ceros if (i == j) { //Se llena la matriz de unos identica[i,j] = 1; } else { //Se llena la matriz de ceros identica[i,j] = 0; } } } Console.WriteLine(); //Imprimimos la matriz for (i =0; i < n; i++) { for (j =0; j <n; j++) { Console.Write(" {0 } ", identica[i,j]); } Console.WriteLine(); } Console.ReadLine(); Ahora le damos Depurar, Iniciar depuración o F5, el cual nos permite ir a la pantalla en donde podremos digitar el orden de la matriz, para luego ser generada, tal y como se muestra a continuación en la siguiente pantalla. Pantalla proyecto matriz_identica_consola Visual csharp Ejercicio 29: Hacer el diagrama y el programa, que permita generar una matriz de n filas por n columnas. Los elementos de matriz son números enteros y positivos, los cuales serán generados Randomicamente, en un rango de 99 a 999. Crear e imprimir dos vectores de la siguiente manera: Un vector llamado m3 que contenga los números múltiplos de tres. Un vector llamado m7 que contenga los números múltiplos de siete. Solucion: Variables de entrada de datos n= Variable que identifica al orden de la matriz. Variables de proceso matriz[i,j]= Matriz que almacenara numeros enteros y positivos generados aleatoriamente. i, j = Variables subíndice de la matriz. l, k= Variables subíndice de los vectores m3 y m7. m3 [l]= Vector que almacena los números múltiplos de tres. m7 [l]= Vector que almacena los números múltiplos de siete. num= Variable que almacena temporalmente el numero generado aleatoriamente. Inicio Random num= Random n matriz [n, n]=num (99, 999) matriz [n, n] l=k = 0 1 1 i= 1, n j= 1, n NO matriz [I, j]%7=0 matriz [I, j]%3=0 SI SI l = l+1 m3 [l] =matriz [I,j] NO K = K+1 m7 [K] =matriz [I,j] Vectores m3 [l] m7 [k] Fin PRIMERA PARTE: Aplicación Consola Nuevamente nos dirigimos al menú Archivo, Nuevo, Proyecto. Al hacerlo nos muestra la pantalla de nuevo proyecto, escogemos Visual C#, Aplicación consola, le damos el nombre al proyecto, en este caso “matriz_multiplos3y7_consola”, luego aceptar, tal y como se muestra en la siguiente pantalla. Pantalla nuevo proyecto Visual csharp Después de esto tendremos la pantalla en donde podremos digitar el código correspondiente para el ejercicio que estamos trabajando. La pantalla es la siguiente. Pantalla proyecto matriz_multiplos3y7_consola Visual csharp Nos ubicamos dentro de las llaves que encierran al método static void Main(string[] args) y digitamos el siguiente codigo. int n;//Indica el orden de la matriz int i, j;//Variables de los subindices de la matriz int l, k;//Variables de los subindices de los vectores // Definimos los vectores int[] m3 = new int[100];//Definicion del vector m3 de cien posiciones int[] m7 = new int[100];//Definicion del vector m7 de cien posiciones //Definimos la semilla para la generacion de los numeros aleatorios Random num = new Random(DateTime.Now.Millisecond); //Definimos el titulo del proyecto Console.Title = "Matriz y Vectores multiplos de tres y siete en CSharp"; Console.WriteLine("\n"); //Ingresamos el orden de la matriz Console.Write("Ingrese el orden de la matriz: "); n = int.Parse(Console.ReadLine()); //Declaramos la matriz de nxn int[,] matriz = new int[n, n]; //Hacemos el llenado de la matriz Randomicamente for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { matriz[i, j] = num.Next(99, 9999); } } Console.WriteLine(); Console.WriteLine("Matriz Generada Inicialmente"); Console.WriteLine("----------------------------"); //Imprimimos la matriz for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { Console.Write(" {0 } ", matriz[i, j]); } Console.WriteLine(); } Console.WriteLine(); //Incializamos las variables l y k en cero l = k = 0; //Efectuamos el recorrido de la matriz para hallar los multiplos de tres //y de siete los cuales se almacenaran en los vectores m3 y m7 for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { //Efectuamos la pregunta para determinar si es muliplo de tres if (matriz[i, j] % 3 == 0) { //Incrementamos la variable l en uno l++; //Introducimos el numero en el vector m3 m3[l] = matriz[i, j]; } else //Efectuamos la pregunta para determinar si es muliplo de siete if (matriz[i, j] % 7 == 0) { //Incrementamos la variable k en uno k++; //Introducimos el numero en el vector m3 m7[k] = matriz[i, j]; } } } Console.WriteLine(); //Imprimimos el vector m3 Console.WriteLine("Vector multiplos de tres"); Console.WriteLine("-----------------------------"); for (i = 1; i <=l; i++) { Console.WriteLine("Posicion: {0} {1}", i, m3[i]); } Console.WriteLine(); //Imprimimos el vector m7 Console.WriteLine("Vector multiplos de siete"); Console.WriteLine("-----------------------------"); for (i = 1; i <= k; i++) { Console.WriteLine("Posicion: {0} {1}", i, m7[i]); } Console.ReadLine(); Ahora le damos Depurar, Iniciar depuración o F5, el cual nos permite ir a la pantalla en donde podremos digitar el orden de la matriz, para luego ser generada, aleatoriamente y la creación de los vectores m3 y m7 respectivamente, tal y como se muestra a continuación en la siguiente pantalla. Pantalla proyecto matriz_multiplos3y7_consola Visual csharp