Librería de Códigos - C#Me he decido a crear este tema con el objetivo de ayudar a las personas a las cuales les pueda ser útil estos códigos. Mi idea es ir posteando códigos que de una manera u otra son útiles para personas que estén aprendiendo a programar en C# y tengan alguna duda. No hay otra manera de explicarlo así que voy a comenzar:
1 - Hallar el máximo número entero de un array de enterosAquí introducimos como parámetro al método un array de enteros llamando "numeros", aquí estará la colección de numeros en la cual queremos buscar el máximo (Dígase máximo al número más grande). Para que entiendan:
int.MinValue es una constante dentro de la clase
Int32 que representa el menor valor posible representable por un entero. Este valor es: -2,147,483,648. Por lo tanto, cualquier entero representable con el tipo de dato
int, será mayor o igual que la constante
MinValue.
Lo que hacemos es recorrer el array de
int números y vamos indexando y comprobando cada posición del array con la variable maximo (int.MinValue en un principio), en caso de que el número sea mayor le asignamos a esa variable el valor en la posición
i del array (o sea, la que se está comprobando) y seguimos recorriendo el array hasta que se hayan comprobado todos los elementos del array. Luego, la variable maximo tendrá almacenado el valor máximo del array. Lo que hacemos es devolverlo.
public static int Maximo(int[] numeros)
{
int maximo = int.MinValue;
for (int i = 0; i < numeros.Length; i++)
{
if (numeros[i] > maximo)
maximo = numeros[i];
}
return maximo;
}
2 - Hallar el segundo mayor elemento en un array de enterosLa idea es parecida a como hallar el mayor elemento, de hecho, lo que se va a hacer es recorer el array e ir buscando el mayor elemento, pero cuando se encuentre uno mayor del que ya se encontró, ese que ya se había encontrado se va a guardar en otra variable. Entonces vamos a tener dos variables, una "mayor" y otra "sMayor" (segundo mayor). La idea es el que se encuentre se pone en la variable mayor y lo que estaba en la variable mayor se pone en la variable sMayor. De esta manera vamos llevando control de las dos variables. Hay que tener en cuenta que la comparación se realiza primero si el elemento indexado es mayor que "mayor", sino, hay que comprobar si es mayor que "sMayor" pues puede darse el caso que existan elementos entre las dos una vez después que se haya asignado los valores una vez y este elemento vendría a ser el segundo mayor.
Una vez recorrido todo el array solo resta devolver la variable "sMayor"
public static int SegundoMayor(int[] numeros)
{
int mayor = int.MinValue;
int sMayor = int.MinValue;
for (int i = 0; i < numeros.Length; i++)
{
if (numeros[i] > mayor)
{
sMayor = mayor;
mayor = numeros[i];
}
else if (numeros[i] > sMayor)
sMayor = numeros[i];
}
return sMayor;
}
3 - Invertir los elementos de un arrayInvertir los elementos viene siendo como hacer un Reverse (Invertir el orden de los elementos del array). Voy a exponer como hacerlo de dos maneras, que es prácticamente lo mismo con la diferencia que en un método modificamos el mismo array y en el otro devolvemos un array nuevo.
Modificando el mismo arrayAquí, recibimos como parámetro de entrada un array (en este caso es un array de int, esto puede servir para otros tipos de datos, o incluso se podría haber hecho genérico, lo expongo con int para simplificar). Básicamente vamos a recorrer el array hasta la mitad, utilizando la facilidad de indexar un array podemos cambiar los valores. Pues el primer elemento del array sería
0 y el último
a.Length -1. Lo que utilizando la variable i del ciclo, podemos ir aumentando y disminuyendo a la vez de una forma desde afuera hacia adentro y haciendo lo que se conoce como Swap (intercambio) en esos elementos. Si nos damos cuenta el último elemento siempre nos vamos a referir como a[a.Length-1-i], puesto que i va aumentando ese valor va a ir reduciéndose. Por lo tanto el objetivo es: Cambiar el primero con el último, el segundo con el penúltimo, y así sucesivamente. Este método es
void, puesto que no devolvemos nada, solamente trabajamos sobre el mismo array.
Nota: Para hacer el Swap lo que hacemos es crear una variable temporal donde asignamos uno de los valores, luego en esta variable que ya guardamos, ponemos el otro elemento a intercambiar, por último, el elemento que guardamos en la variable temporal se lo asignamos a la variable de donde sacamos el valor a intercambiar.
public static void InvierteV(int[] a)
{
for (int i = 0; i < a.Length / 2; i++)
{
int temp = a[i]; //Asignamos valor a la variable temporal
a[i] = a[a.Length - 1 - i]; //Copiamos el valor de la parte trasera del array a la frontal
a[a.Length - 1 - i] = temp; //Copiamos el valor guardado en la variable temporal a la parte trasera del array
}
}
Devolviendo un nuevo arraypublic static int[] InvierteN(int[] a)
{
int[] newInt
= new int[a
.Length];
//Copiamos los elementos del array al nuevo array
for (int i = 0; i < a.Length; i++)
newInt[i] = a[i];
for (int i = 0; i < newInt.Length/2; i++)
{
int temp = newInt[i]; //Asignamos valor a la variable temporal
newInt[i] = newInt[newInt.Length - 1-i]; //Copiamos el valor de la parte trasera del array a la frontal
newInt[newInt.Length - 1-i] = temp; //Copiamos el valor guardado en la variable temporal a la parte trasera del array
}
return newInt;
}
Esta forma funciona casi idéntico, solo que hacemos primero una copia del array en un array nuevo con la misma longitud y los mismos valores, para luego trabajar sobre este array y después devolverlo tras realizarle el proceso de invertir los elementos explicados en la forma anterior.
Nota: El proceso de crear la copia del array lo hago inicializando un array de la misma longitud que el que entra como parámetro y recorriendo este array y copiando los valores a este nuevo array. Quería destacar que para hacer la copia del array podíamos usar el método
Array.Copy(), pasándole el array desde donde se quiere copiar, el array a donde se va a copiar y la cantidad de elementos a copiar, en este caso todos. Hubiera sido algo así:
Array.Copy(a, newInt, a.Length);
De esta forma nos hubiéramos ahorrado el primer ciclo del método (aunque en términos de eficiencia es prácticamente lo mismo)
4 - EsPrimoBásicamente esto es algo bastante utilizado, aunque esta manera de implementarlo es "sencilla" a simple vista, puede ser un proceso extremadamente largo para números muy grandes.
public static bool EsPrimo(int a)
{
int raizDelNumero = (int)Math.Sqrt(a);
for (int i = 2; i <= raizDelNumero; i++)
if (a % i == 0)
return false;
return true;
}
Lo que hacemos es calcular la raiz del numero y guardarla en una variable. Utilizamos el metodo
.Sqrt dentro de la clase
Math. El cuál calcula la raíz cuadrada de un número. Este método devuelve un
double, por eso le hacemos un
cast a
int (
cast es una conversión forzada a un tipo de datos). El objetivo del método es recorrer todos los números desde 2 hasta la raíz del número y ver si alguno de esos números divide al número (o sea, deja resto 0 con el número). En caso de que alguno de esos números divida al número, implica que el número no es primo. Si el ciclo termina sin devolver
false, entonces devolvemos
true pues el numero es primo.
Bueno, aquí les dejo los cuatro primeros, luego sigo añadiendo más de acuerdo al tiempo que tenga libre. Si alguien quiere aportar sean libres de hacerlo. Esto son cosas sencillas, pero que para personas que están aprendiendo pueden ser muy útiles. Recuerden, si añaden, comentar los códigos y/o explicarlos.
Salu2s