gentoo linux, java, software libre y otras hierbas
nov, 19 2008 - 5:47 pm

Arreglos bidimensionales en C#

Las matrices o arreglos de dos dimensiones, son arrays bidimensionales cuyos elementos tienen dos indices. En C Sharp existen dos tipos de arreglos bidimensionales, los rectangulares y los dinámicos. Por lo general, cuando accedemos a arreglos bidimensionales utilizamos los términos filas y columnas.

En los arreglos bidimensionales rectangulares, cada fila tiene la misma cantidad de columnas. Por otro lado, las filas de los arreglos bidimensionales dinámicos pueden tener diferente cantidad de columnas. A continuación, una serie de ejemplos en donde se explica cómo se declara e inician los dos tipos de arreglos:

Declaración e iniciación de arreglos de dos dimensiones

using System;
public class ArregloDosDimensiones {
  static void Main() {
     // declaracion e iniciación de arreglos rectangulares
     int[,] arreglo1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
     // declaración e iniciación de arreglos dinamicos
     int[][] arreglo2 = new int[ 3 ][];
     string salida = "";
     arreglo2[ 0 ] = new int[] { 1, 2 };
     arreglo2[ 1 ] = new int[] { 3 };
     arreglo2[ 2 ] = new int[] { 4, 5, 6 };
     salida = "Valores en arreglo1 por fila\n";
     // salida del arreglo1
     for ( int i = 0; i < arreglo1.GetLength( 0 ); i++ ) {
        for ( int j = 0; j < arreglo1.GetLength( 1 ); j++ )
           salida += arreglo1[ i, j ] + "  ";
        salida += "\n";
     }
     salida += "\nValores en arreglo2 por fila\n";
     // salida del arreglo2
     for ( int i = 0; i < arreglo2.Length; i++ ) {
        for ( int j = 0; j < arreglo2[ i ].Length; j++ )
           salida += arreglo2[ i ][ j ] + "  ";
        salida += "\n";
     }
     Console.WriteLine(salida);
  }
}

Salida…

Valores en arreglo1 por fila
1 2 3
4 5 6

Valores en arreglo2 por fila
1 2
3
4 5 6

Descargar código fuente

Ejemplo con arreglos bidimensionales

using System;
public class DoubleArray {
  static int[][] calificacion;
  static int estudiantes, examenes;
  static void Main() {
     string salida = "                   ";
     calificacion = new int[ 3 ][];
     calificacion[ 0 ] =  new int[]{ 77, 68, 86, 73 };
     calificacion[ 1 ] =  new int[]{ 96, 87, 89, 81 };
     calificacion[ 2 ] =  new int[]{ 70, 90, 86, 81 };
     estudiantes = calificacion.Length;      // numero de estudiantes
     examenes = calificacion[ 0 ].Length;    // numero de examenes
     // columnas
     for ( int i = 0; i < examenes; i++ )
        salida += "[" + i + "]  ";
     // filas
     for ( int i = 0; i < estudiantes; i++ ) {
        salida += "\ncalificaciones[" + i + "]   ";
        for ( int j = 0; j < examenes; j++ )
           salida += calificacion[ i ][ j ] + "   ";
     }
     salida += "\n\nCal. m&amp;amp;aacute;s baja: " + minimo() +
        "\nCal. m&amp;amp;aacute;s alta: " + maximo() + "\n";

     for ( int i = 0; i < estudiantes; i++ )
        salida += "\nEl promedio por estudiante " + i + " es " +
           promedio( calificacion[ i ] );
     Console.WriteLine(salida);
  }
  // buscar calificacion minima en el arreglo
  static public int minimo() {
     int baja = 100;
     for ( int i = 0; i < estudiantes; i++ )
        for ( int j = 0; j < examenes; j++ )
           if ( calificacion[ i ][ j ] < baja )
              baja = calificacion[ i ][ j ];
       return baja;
  }
  // buscar calificacion maxima en en arreglo
  static public int maximo() {
     int alta = 0;
     for ( int i = 0; i < estudiantes; i++ )
        for ( int j = 0; j < examenes; j++ )
           if ( calificacion[ i ][ j ] > alta )
              alta = calificacion[ i ][ j ];
       return alta;
  }
  // determinar el promedio de la calificacion
  static public double promedio( int[] calificaciones ) {
     int total = 0;
     for ( int i = 0; i < calificaciones.Length; i++ )
        total += calificaciones[ i ];
     return ( double ) total / calificaciones.Length;
  }
}

Salida…

[0] [1] [2] [3]
calificaciones[0] 77 68 86 73
calificaciones[1] 96 87 89 81
calificaciones[2] 70 90 86 81

Cal. más baja: 68
Cal. más alta: 96

El promedio por estudiante 0 es 76
El promedio por estudiante 1 es 88,25
El promedio por estudiante 2 es 81,75

Descargar código fuente

Bonus: sentencia foreach en C#

Cuando de recorrer arreglos se trata, existe una sentencia bastante útil: foreach. Foreach es similar a un for, solo que es un poco más simple. La sintaxis es foreach(VARIABLE in ARREGLO), y cada vez que ocurre una iteración, VARIABLE va tomando los valores del arreglo en orden:

using System;
class Foreach {
   // main entry point for the application
   static void Main(string[] args) {
      int[,] calificaciones = { { 77, 68, 86, 73 },
         { 98, 87, 89, 81 }, { 70, 90, 86, 81 } };
      int baja = 100;
      foreach ( int calificacion in calificaciones ) {
         if ( calificacion < baja )
            baja = calificacion;
      }
      Console.WriteLine( "La calificacion mas baja es: " + baja );
   }
}

Descargar código fuente

Los ejercicios utilizados en este post están basados en ejemplos del libro C# How to Program de Deitel. Se pone a disposición la descargar del programa original, desarrollado para trabajar sobre Visual Studio de Microsoft en plataformas Windows, y se encuentra en inglés. La versión simplificada está basada en la original, pero sin código basura insertado por Visual Studio, se encuentra en español y ha sido probada sobre Gnu/Linux usando Mono.

17 Comentarios | deja el tuyo

17 Comentarios en “Arreglos bidimensionales en C#”

  1. Josuet dice:

    hola men me fue de mucha ayuda pero tengo un pekeño prblema yo necesito hacer q una matriz de 3*3 se multiplique una fila por una columna algo asi

    AxB[0,0]=A[0,0]*B[0,0]+A[0,1]*B[1,0]+A[0,2]*B[2,0];

    y asi con cada una de las posiciones

    si me pudieras ayudar t lo agradecería un mundo

  2. Restovich Estefania dice:

    Necesito saber como se hace este ej.Se recibe un mensaje codificado formado solo por caracteres alfabéticos en mayúsculas .El fin del texto se indica con una barra(´/`).el poseso de codificación consiste en remplazar cada letra del texto por otra de acuerdo a un numero k de forma q cada letra q ocupa el k esimo lugar siguiente en el codigo ASCII.,
    POR EJEMPLO si k es 3.
    mensaje codificado:´SURJUDPDFLRQ´
    MENSAJE A RECUPERAR:PROGRAMACION

    Desde ya muchas gracias.

¡Déjanos tu comentario!