AnteriorPosterior

4.2. Arrays bidimensionales

  Curso: Programación en C# (2015), por Nacho Cabanes

4.2. Arrays bidimensionales

Podemos declarar tablas de dos o más dimensiones. Por ejemplo, si un profesor quiere guardar datos de dos grupos de alumnos, cada uno de los cuales tiene 20 personas, tendría dos opciones:

  • Se puede usar int datosAlumnos[40] y entonces debemos recordar que los 20 primeros datos corresponden realmente a un grupo de alumnos y los 20 siguientes a otro grupo. Es "demasiado artesanal", así que no daremos más detalles.
  • O bien podemos emplear int datosAlumnos[2,20] y entonces sabemos que los datos de la forma datosAlumnos[0,i] son los del primer grupo, y los datosAlumnos[1,i] son los del segundo.
  • Una alternativa, que puede sonar más familiar a quien ya haya programado en C es emplear int datosAlumnos[2][20] pero en C# esto no tiene exactamente el mismo significado que [2,20], sino que se trata de dos arrays, cuyos elementos a su vez son arrays de 20 elementos. De hecho, podrían ser incluso dos arrays de distinto tamaño, como veremos en el segundo ejemplo.

En cualquier caso, si queremos indicar valores iniciales, lo haremos entre llaves, igual que si fuera una tabla de una única dimensión.

Vamos a ver un primer ejemplo de uso con arrays "rectangulares", de la forma [2,20], lo que podríamos llamar el "estilo Pascal". En este ejemplo usaremos tanto arrays con valores prefijados, como arrays para los que reservemos espacio con "new" y a los que demos valores en un segundo paso:

// Ejemplo_04_02a.cs
// Array de dos dimensiones "rectangulares" (estilo Pascal)
// Introducción a C#, por Nacho Cabanes
 
using System;
 
public class Ejemplo_04_02a
{
    public static void Main()
    {
        int[,] notas1 = new int[2,2]; // 2 bloques de 2 datos
        notas1[0,0] = 1; 
        notas1[0,1] = 2; 
        notas1[1,0] = 3; 
        notas1[1,1] = 4;
 
        int[,] notas2 = // 2 bloques de 10 datos, prefijados
        { 
            {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
            {11, 12, 13, 14, 15, 16, 17, 18, 19, 20} 
        };
 
        Console.WriteLine("La nota1 del segundo alumno del grupo 1 es {0}",
            notas1[0,1]);
        Console.WriteLine("La nota2 del tercer alumno del grupo 1 es {0}",
            notas2[0,2]);  
    }
}
 

Este tipo de tablas de varias dimensiones son las que se usan también para guardar matrices, cuando se trata de resolver problemas matemáticos más complejos que los que hemos visto hasta ahora. Si ya has estudiado la teoría de matrices, más adelante tienes algunos ejercicios propuestos para aplicar esos conocimientos al uso de arrays bidimensionales.

La otra forma de tener arrays multidimensionales son los "arrays de arrays", que, como ya hemos comentado, y como veremos en este ejemplo, pueden tener elementos de distinto tamaño. En ese caso nos puede interesar saber su longitud, para lo que podemos usar "a.Length":

// Ejemplo_04_02b.cs
// Array de arrays (array de dos dimensiones al estilo C)
// Introducción a C#, por Nacho Cabanes
 
using System;
 
public class Ejemplo_04_02b
{
    public static void Main()
    {
        int[][] notas;         // Array de dos dimensiones
        notas = new int[3][];  // Seran 3 bloques de datos
        notas[0] = new int[10];  // 10 notas en un grupo
        notas[1] = new int[15];  // 15 notas en otro grupo
        notas[2] = new int[12];  // 12 notas en el ultimo
 
        // Damos valores de ejemplo
        for (int i=0;i<notas.Length;i++)
        {
            for (int j=0;j<notas[i].Length;j++)
            {
                notas[i][j] = i + j;
            }
        }
 
        // Y mostramos esos valores
        for (int i=0;i<notas.Length;i++)
        {
            for (int j=0;j<notas[i].Length;j++)
            {
                Console.Write(" {0}", notas[i][j]);
            }
            Console.WriteLine();
        }
 
    } // Fin de "Main"
}
 

La salida de este programa sería

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 4 5 6 7 8 9 10 11 12 13
 

Ejercicios propuestos:

Ejercicio propuesto 4.2.1: Un programa que pida al usuario dos bloques de 10 números enteros (usando un array de dos dimensiones). Después deberá mostrar el mayor dato que se ha introducido en cada uno de ellos.
Ejercicio propuesto 4.2.2: Un programa que pida al usuario dos bloques de 6 cadenas de texto. Después pedirá al usuario una nueva cadena y comprobará si aparece en alguno de los dos bloques de información anteriores.
Ejercicio propuesto 4.2.3: Un programa que pregunte al usuario el tamaño que tendrán dos bloques de números enteros (por ejemplo, uno de 10 elementos y otro de 12). Luego pedirá los datos para ambos bloques de datos. Finalmente deberá mostrar el mayor dato que se ha introducido en cada uno de ellos.

Si has estudiado álgebra de matrices:

Ejercicio propuesto 4.2.4: Un programa que calcule el determinante de una matriz de 2x2.
Ejercicio propuesto 4.2.5: Un programa que calcule el determinante de una matriz de 3x3.
Ejercicio propuesto 4.2.6: Un programa que calcule si las filas de una matriz son linealmente dependientes.
Ejercicio propuesto 4.2.7: Un programa que use matrices para resolver un sistema de ecuaciones lineales mediante el método de Gauss.

Actualizado el: 27-11-2014 01:22

AnteriorPosterior