Arreglos en C#

Un arreglo (yo lo llamaré así, ya que es la traducción de array, aunque también lo podrás encontrar como matriz o vector) es un tipo de dato estructurado que sirve para almacenar múltiples variables de un tipo en común. En palabras más sencillas, es una lista que nos va a permitir guardar muchos datos del mismo tipo. También podemos acceder a esos datos almacenados gracias al índice que posee cada arreglo, estos suelen empezar desde cero, por ejemplo, si tengo un arreglo o lista de cinco espacios, el índice empezará en cero (esto no lo olvides nunca) y terminará en cuatro. Veamos como se ve un arreglo de manera gráfica.

Como podemos apreciar, un arreglo se puede graficar de aquella manera, donde cada cuadrado representa un item del arreglo. En cada item vamos a guardar un nombre y en la parte inferior, podemos ver los índices que nos van a ayudar a identificar cada item dentro del arreglo. Por ejemplo, si nuestro arreglo se llama «estudiantes», para obtener a la estudiante «Karen», tendremos que hacer lo siguiente: estudiantes[3].

Ahora veamos como se ve el ejemplo anterior dentro de C#, para ello vamos a crear un nuevo proyecto e ingresaremos las siguientes líneas de código.

/* Declaración básica */
string[] estudiantes = new string[5];

De esta manera hemos creado un arreglo que almacenará elementos de tipo string y que tendrá cinco espacios. No confundir el tamaño del arreglo con el valor máximo del índice. Cuando declaramos un arreglo tenemos que especificar la cantidad de espacios que este tendrá, según el ejemplo anterior, este debe tener cinco espacios (o cinco casilleros como se muestra en el gráfico), esto no tiene nada que ver con el índice que siempre empezará en cero, y en nuestro ejemplo, su valor máximo será cuatro (siempre será una unidad menos que el tamaño del arreglo el cual se representa como n-1).

Ahora vamos a asignarle valores a nuestro arreglo.

estudiantes[0] = "Carla";
estudiantes[1] = "José";
estudiantes[2] = "Juan";
estudiantes[3] = "Karen";
estudiantes[4] = "Denis";

A cada item del arreglo le hemos asignado un valor, y como ven, hemos empezado en el índice cero y hemos terminado en el cuatro. ¿Qué pasa si le asignamos un valor a un item que no existe? Supongamos que ponemos lo siguiente: estudiantes[5] = «Pepe». Según nuestro ejemplo, ese item no existe dentro del arreglo, por lo tanto, el compilador de C# nos arrojará una excepción (así se les llama a los horrores de programación) llamada «índice fuera de rango» y el programa dejará de funcionar. Aunque no lo crean, este tipo de error es bastante común dentro del mundo de la programación.

Ahora te voy a enseñar como declarar y asignar valores de una forma más simple.

/* Declaramos los valores entre llaves y separados por comas,
 * así mismo, ya no es necesario ponerle el tamaño al arreglo,
 * C# contará los valores que asignamos y ese será el tamaño de nuestro arreglo */
string[] fruits = new string[] { "Pera", "Manzana", "Uva" };

/* También podemos obviar el "new" */
int[] years = { 1992, 1993, 1994, 1995, 1996 };

La cosa no cambia mucho, pero es importante tenerlo en cuenta.

También es importante tener en cuenta los siguientes puntos.

  • Un arreglo puede ser de cualquier tipo, inclusive puedes almacenar un arreglo dentro de otro.
  • El tamaño de un arreglo se establece siempre al inicio y este no puede cambiar durante el ciclo de vida del arreglo, existen algunas funciones que te permiten hacerlo, pero digamos que no es una buena práctica. Siempre debemos programar sabiendo que su tamaño no cambiará.
  • Existen elementos más avanzados como el arrayList o las listas genéricas que funcionan mucho mejor que un arreglo, pero es necesario saber como funcionan estos para que el aprendizaje de los otros sea más fácil.
  • Puedes usar la propiedad Length para saber de que tamaño es un arreglo.
  • Las palabras almacenadas en un string se convierten automaticámente en un arreglo de Char, por lo tanto, podrás acceder a cada letra de una palabra recorriendolo con un for como si fuera un arreglo.

Ahora resolvamos algunos ejercicios.

Ejercicio 1: Cree un programa que solicite cinco calificaciones y al final imprima todas las calificaciones y el promedio de estas.

// Declaramos nuestro arreglo, pero no le asignamos ningún valor.
// Como son cinco calificaciones, lo crearemos con tamaño 5
double[] scores = new double[5];
// Este índice nos ayudará a recorrer nuestro arreglo.
int index = 0;
// Para obtener el promedio, necesitamos sumar todas las calificaciones.
double scoreSum = 0;
double prom;

// Ahora le pediremos al usuario que ingrese las calificaciones
// Para ello necesitamos un bucle que se repita cinco veces, 
// para las cinco calificaciones. Eso lo podemos hacer con un for, while o do while
// para este ejemplo usaremos un while, es decir, nuestro bucle se va a
// ejecutar mientras index sea menor que 5
while (index < 5)
{
    // A index le sumamos 1 porque recuerda que empieza en 0
    Console.Write($"Ingrese la calificacón número {index+1}: ");
    // A nuestro arreglo le iremos asignando los valores que el usuario ingrese
    scores[index] = double.Parse(Console.ReadLine());
    // Aquí sumaremos todas las calificaciones.
    scoreSum += scores[index];
    // Actualizamos nuestro índice sino nuestro bucle se ejecutará de manera infinita
    index++;
}

// Como último paso, tenemos que imprimir todas las calificaciones.
// Para ello usaremos un for
// El for iniciará en 0 y se ejecutará mientras este sea menor que el tamaño del arreglo
for(int i = 0; i < scores.Length; i++)
{
    Console.WriteLine($"La calificación número {i + 1} es: {scores[i]}");
}

// Nos falta obtener el promedio de las calificaciones
// Para ellos vamos a dividir la suma de las calificaciones, entre el tamaño del arreglo
// o mejor dicho el número de calificaciones.
prom = scoreSum / scores.Length;
Console.WriteLine($"El promedio de todas las calificaciones es: {prom}");

Como pueden ver en el código, el ejercicio es bastante fácil, ahora vamos a ver el resultado.

Ingrese la calificacón número 1: 6
Ingrese la calificacón número 2: 6.5
Ingrese la calificacón número 3: 7
Ingrese la calificacón número 4: 1.2
Ingrese la calificacón número 5: 3
La calificación número 1 es: 6
La calificación número 2 es: 6.5
La calificación número 3 es: 7
La calificación número 4 es: 1.2
La calificación número 5 es: 3
El promedio de todas las calificaciones es: 4.74

Aumentemos un poco la dificultad.

Ejercicio 2: Cree un programa que permita saber cual es el número mayor y menor de un grupo de números ingresados por el usuario.

// Declaramos nuestro arreglo de tamaño 10 y le vamos a pedir al usuario que ingrese 10 números.
int[] numbers = new int[10];
int index = 0;
int maxNumber = 0;
int minNumber = 0;

// El proceso para pedirle los números al usuario será lo mismo que el ejercicio anterior.
while(index < 10)
{
    Console.Write($"Ingrese el número {index + 1}: ");
    numbers[index] = int.Parse(Console.ReadLine());
    index++;
}

// Ahora procesaremos nuestros datos para saber que número es mayor o menor
// Para ello recorreremos todo el arreglo con un for
for (int i = 0; i < numbers.Length; i++)
{
    // Asignamos el primer valor del arreglo a nuestras variables.
    if (i == 0)
    {
        minNumber = numbers[i];
        maxNumber = numbers[i];
    }
    // Ahora realizamos las comparaciones. Si el número del arreglo es mayor
    // al que está almacenado en nuestras variables, actualizamos la variable
    // para obtener el número menor se hará lo mismo, pero comparando si es menor.
    if(numbers[i] < minNumber)
    {
        minNumber = numbers[i];
    }
    if (numbers[i] > maxNumber)
    {
        maxNumber = numbers[i];
    }
}

// Ahora le mostramos al usuario los resultados
Console.WriteLine($"El número mayor ingresado es: {maxNumber}");
Console.WriteLine($"El número menor ingresado es: {minNumber}");

Aunque hay que pensar un poquito, el ejercicio no es tan complicado, ahora veremos el resultado.

Ingrese el número 1: 9
Ingrese el número 2: 1
Ingrese el número 3: 3
Ingrese el número 4: 8
Ingrese el número 5: 7
Ingrese el número 6: 1
Ingrese el número 7: 0
Ingrese el número 8: 8
Ingrese el número 9: 16
Ingrese el número 10: 8
El número mayor ingresado es: 16
El número menor ingresado es: 0

Interesante, ¿verdad? Ahora te toca a ti.

Ejercicio 3: Cree un programa que le permita al usuario ingresar 10 números y que al final te muestre cual es el número que se repite más veces y la cantidad de veces que se repite.

Ingrese el número 1: 9
Ingrese el número 2: 1
Ingrese el número 3: 3
Ingrese el número 4: 8
Ingrese el número 5: 7
Ingrese el número 6: 1
Ingrese el número 7: 0
Ingrese el número 8: 8
Ingrese el número 9: 16
Ingrese el número 10: 8
El número que se repite más veces es el 1, y se repite 2 veces.

Pista: Este ejercicio es parecido al número 2, tienes que empezar con el primer número y compararlo con todo el arreglo, así mismo, debes ir contando cuantas veces se repite. Si existe otro número que se repite más veces, actualizas las variables de apoyo que estés usando.

Ejercicio 4: Cree un programa que ayude a identificar si un número o palabra ingresada por el usuario es capicúa, es decir, que se lee de la misma manera tanto de derecha a izquieda, como de izquierda a derecha.

Ingrese un número o palabra: reconocer
El número o palabra ingresada es capicúa.
Ingrese un número o palabra: 1234
El número o palabra ingresada no es capicúa.

Pista: Como te comenté más arriba, todas las palabras se convierten en un arreglo de manera automática, por lo tanto, lo único que tienes que hacer es comparar del inicio al final si las letras se repiten, en caso alguna no lo haga, puedes decir que no es capicúa.

¡Con eso hemos terminado la clase de hoy!


Recuerda que puedes comentar, suscribirte a nuestro blog y calificar la entrada para saber si el contenido te ha gustado. Si tienes alguna duda, no temas en preguntar. También te invitamos a seguir todas nuestras redes sociales y a unirte a nuestro servidor de discord. Te invito también a mis propias redes sociales en donde estaré colgando contenido adicional sobre programación, libros y videojuegos.