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. Desarrollar y entregar en un archivo .CPP por cada problema referido a continuación (con el nombre que se relaciona para cada uno de ellos) :

    T02-01.CPP: Leer una serie de valores enteros, cuya cantidad es dada inicialmente por parte del usuario, determinando al final cuántos de ellos corresponden a múltiplos del primer número leído.
    T02-02.CPP: Dado un número entero, establecer si es o no un número primo.
    T02-03.CPP: Dada una serie de valores numéricos reales, determinar:
    Cuál de ellos es el menor de todos
    Cuál de ellos es el mayor de todos
    Cuántos números se leyeron
    son 3 ejercicios

  2. escribir un programa que lea una matriz de 3*3 elementos numericos reales calcule y mostrar al fin la sumatoria de todos los elementos , a exepcion de los ubicados en las esquinas

  3. aldo sanchez dice:

    por favor un programa que lea una matriz de 5*5 donde calcula la suma de las filas y la de las columnas

  4. iris serrano dice:

    jejejejeje o0p´s petiiciones ON! jejejeje

    psss iiop nomas necesiito una arreglo de 3*3 que haga el juego del GATO!! juju iia lo iise pero no ce como desplegarlo me sale en forma liinela :S i help you pliis :S sii???

  5. jacobo dice:

    necesito ejercicios de matrices y estructuras

  6. jair dice:

    declarar inicialiczar una matriz de 3 filas 3 columnas, se desea saber cual es la suma de cada fila y cada columna, insertar los datos en arreglos diferentes.

  7. Diana dice:

    hola, muchos saludos, bueno disculpen las molestias, pero podrian ayudarme a hacer un programa que almacene 10 valores en un arreglo bidimencional de 2*5, multiplique por 2 a todos ellos y los almacene en un segundo arreglo bidimencional eh imprima el arreglo con los valores capturados y el arreglo que contiene los valores de este multiplicados por 2.

    es que soy novata XD y se me complica eh intentado hacerlo pero no me convence.

    saludos
    gracias

  8. gaya dice:

    necesito un ejemplillo de matriz de n*m
    plis gracias de antemano

  9. Wozniac dice:

    Y como hago para que me diga en que columna y fila esta la calificacion?

  10. niña traviesaa dice:

    la verdad los codigos son entendibless…pero m gustaria tanto k publicaran unos codigos k contengan mas sentencias….ok
    graciass..saludos
    a todos…

  11. luisa dice:

    necesito ejemplos de matrices

  12. Duvan dice:

    por favor ayuda necesito hacer este programa …. se que es facil para ustedes ….

    Escribir un programa que pida un número e imprima por pantalla su tabla de sumar:

    0 1 2 3 4
    1 2 3 4 5
    2 3 4 5 6
    3 4 5 6 7
    4 5 6 7 8
    Ej. La tabla anterior es la tabla del 4, sus intersecciones son el resultado de la suma del identificador de fila y columna

  13. erick dice:

    Gracias amigo esto me a sido muy util

  14. marina dice:

    porfavor necesito un ejemplo para calcular el promedio de edad dentro de un for para c#

¡Déjanos tu comentario!