En un programa de gestión o una utilidad que nos ayuda a administrar un sistema, no es habitual que podamos permitir que las cosas ocurran al azar. Pero los juegos se encuentran muchas veces entre los ejercicios de programación más completos, y para un juego sí suele ser conveniente que haya algo de azar, para que una partida no sea exactamente igual a la anterior.
Generar números al azar ("números aleatorios") usando C# no es difícil: debemos crear un objeto de tipo "Random" (una única vez), y luego llamaremos a "Next" cada vez que queramos obtener valores entre dos extremos:
// Creamos un objeto Random
Random generador = new Random();
// Generamos un número entre dos valores dados
// (el segundo límite no está incluido)
int aleatorio = generador.Next(1, 101);
También, una forma simple de obtener un único número "casi al azar" entre 0 y 999 es tomar las milésimas de segundo de la hora actual:
int falsoAleatorio = DateTime.Now.Millisecond;
Pero esta forma simplificada no sirve si necesitamos obtener dos números aleatorios a la vez, porque los dos se obtendrían en el mismo milisegundo y tendrían el mismo valor; en ese caso, no habría más remedio que utilizar "Random" y llamar dos veces a "Next".
Vamos a ver un ejemplo, que muestre en pantalla dos números al azar:
// Ejemplo_05_09_01a.cs
// Números al azar
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_05_09_01a
{
public static void Main()
{
Random r = new Random();
int aleatorio = r.Next(1, 11);
Console.WriteLine("Un número entre 1 y 10: {0}", aleatorio);
int aleatorio2 = r.Next(10, 21);
Console.WriteLine("Otro entre 10 y 20: {0}", aleatorio2);
}
}
Ejercicios propuestos:
Ejercicio propuesto 5.9.1.1: Crea un programa que imite el lanzamiento de un dado, generando un número al azar entre 1 y 6.
Ejercicio propuesto 5.9.1.2: Crea un programa que genere un número al azar entre 1 y 100. El usuario tendrá 6 oportunidades para acertarlo.
Ejercicio propuesto 5.9.1.3: Mejora el programa del ahorcado (4.4.9.3), para que la palabra a adivinar no sea tecleada por un segundo usuario, sino que se escoja al azar de un "array" de palabras prefijadas (por ejemplo, nombres de ciudades).
Ejercicio propuesto 5.9.1.4: Crea un programa que genere un array relleno con 100 números reales al azar entre -1000 y 1000. Luego deberá calcular y mostrar su media.
Ejercicio propuesto 5.9.1.5: Crea un programa que "dibuje" asteriscos en 100 posiciones al azar de la pantalla. Para ayudarte para escribir en cualquier coordenada, puedes usar un array de dos dimensiones (con tamaños 24 para el alto y 79 para el ancho), que primero rellenes y luego dibujes en pantalla.
En C# tenemos muchas funciones matemáticas predefinidas, como:
(casi todos ellos usan parámetros X e Y de tipo "double"; en el caso de las funciones trigonométricas, el ángulo se debe indicar en radianes, no en grados)
y también tenemos una serie de constantes como
Todas ellas se usan precedidas por "Math."
La mayoría de ellas son específicas para ciertos problemas matemáticos, especialmente si interviene la trigonometría o si hay que usar logaritmos o exponenciales. Pero vamos a destacar las que sí pueden resultar útiles en situaciones más variadas, que casi cualquier programador pueda necesitar:
Un ejemplo más avanzado, usando funciones trigonométricas, que calculase el "coseno de 45 grados" podría ser:
// Ejemplo_05_09_02a.cs
// Ejemplo de funciones trigonometricas
// Introducción a C#, por Nacho Cabanes
using System;
public class Ejemplo_05_09_02a
{
public static void Main()
{
double anguloGrados = 45;
double anguloRadianes = anguloGrados * Math.PI / 180.0;
Console.WriteLine("El coseno de 45 grados es: {0}",
Math.Cos(anguloRadianes));
}
}
Ejercicios propuestos:
Ejercicio propuesto 5.9.2.1: Crea un programa que halle (y muestre) la raíz cuadrada del número que introduzca el usuario. Se repetirá hasta que introduzca 0.
Ejercicio propuesto 5.9.2.2: Crea un programa que halle cualquier raíz (de cualquier orden) de un número. El usuario deberá indicar el número (por ejemplo, 2) y el índice de la raíz (por ejemplo, 3 para la raíz cúbica). Pista: hallar la raíz cúbica de 2 es lo mismo que elevar 2 a 1/3.
Ejercicio propuesto 5.9.2.3: Haz un programa que resuelva ecuaciones de segundo grado, del tipo ax2 + bx + c = 0. El usuario deberá introducir los valores de a, b y c. Se deberá crear una función "CalcularRaicesSegundoGrado", que recibirá como parámetros los coeficientes a, b y c (por valor), así como las soluciones x1 y x2 (por referencia). Deberá devolver los valores de las dos soluciones x1 y x2. Si alguna solución no existe, se devolverá como valor 100.000 para esa solución. Pista: la solución se calcula con x = -b ± raíz (b2 – 4•a•c) / (2•a)
Ejercicio propuesto 5.9.2.4: Haz un programa que pida al usuario 5 datos numéricos enteros, los guarde en un array, pida un nuevo dato y muestre el valor del array que se encuentra más cerca de ese dato, siendo mayor que él, o el texto "Ninguno es mayor" si ninguno lo es.
Ejercicio propuesto 5.9.2.5: Crea un programa que pida al usuario 5 datos numéricos reales, los guarde en un array, pida un nuevo dato y muestre el valor del array que se encuentra más cerca de ese dato en valor absoluto (es decir, el más próximo, sea mayor que él o menor que él).
Ejercicio propuesto 5.9.2.6: Crea una función "Distancia", que calcule la distancia entre dos puntos (x1,y1) y (x2,y2), usando la expresión d = raíz [ (x1-x2)2 + (y1-y2)2 ].
Ejercicio propuesto 5.9.2.7: Crea un programa que pida al usuario un ángulo (en grados) y muestre su seno, coseno y tangente. Recuerda que las funciones trigonométricas esperan que el ángulo se indique en radianes, no en grados. La equivalencia es que 360 grados son 2*PI radianes.
Ejercicio propuesto 5.9.2.8: Crea un programa que muestre los valores de la función y = 10 * seno(x*5), para valores de x entre 0 y 72 grados.
Ejercicio propuesto 5.9.2.9: Crea un programa que "dibuje" la gráfica de la función y = 10 * seno(x*5), para valores de x entre 0 y 72 grados. Para ayudarte para escribir en cualquier coordenada, puedes usar un array de dos dimensiones, que primero rellenes y luego dibujes en pantalla (mira el ejercicio 5.9.1.5).
Ejercicio propuesto 5.9.2.10: Crea un programa que "dibuje" un círculo dentro de un array de dos dimensiones, usando las ecuaciones x = xCentro + radio * coseno(ángulo), y = yCentro + radio * seno(ángulo). Si tu array es de 24x79, las coordenadas del centro serían (12,40). Recuerda que el ángulo se debe indicar en radianes (mira el ejercicio 5.9.1.5 y el 5.9.2.9).
En C# hay muchas más funciones de lo que parece. De hecho, salvo algunas palabras reservadas (int, float, string, if, switch, for, do, while...), gran parte de lo que hasta ahora hemos llamado "órdenes", son realmente "funciones", como Console.ReadLine (que devuelve la cadena que se ha introducido por teclado) o Console.WriteLine (que es "void", no devuelve nada). Nos iremos encontrando con otras muchas funciones a medida que avancemos.