En la programación es habitual la necesidad de generar números aleatorios, en su concepto mas simple un numero aleatorio es: un número que se genera al azar, sin seguir un patrón o una secuencia predecible. Se utiliza en una variedad de aplicaciones, como juegos, simulaciones, criptografía y pruebas de estadísticas.
Los números aleatorios se utilizan en muchos campos para simular situaciones aleatorias y realizar experimentos estadísticos. Por ejemplo, en los juegos de azar, los números aleatorios se utilizan para determinar el resultado de cada ronda, y en las pruebas estadísticas, los números aleatorios se utilizan para seleccionar muestras de una población para estudiar.
Es importante tener en cuenta que, aunque un número aleatorio parece ser completamente aleatorio e impredecible, en realidad es generado por un algoritmo o un proceso que sigue ciertas reglas matemáticas o físicas. Sin embargo, estos algoritmos se diseñan para producir números que parezcan aleatorios y que no sigan ningún patrón predecible. En C++ se utilizan generalmente dos bibliotecas para generar números aleatorios la biblioteca "Windows.h" y la "time.h".
Existen otras bibliotecas que también manejan las mismas instrucciones por ejemplo la "stdlib" y la "ctime", para generar los numeros aleatorios el uso de una u otra es indiferente.
Lo primero que se hace es definir la fuente de los números aleatorios para esto se usa la instrucción:
srand(time(NULL)); // srand significa fuente de números aleatorios.
Nota: Se puede usar time(NULL) o time(0), los cuales son en realidad lo mismo, ya que ambos pasan un puntero nulo o un valor entero cero como argumento a la función time(). En otras palabras, time(NULL) y time(0) solicitan a la función time() que devuelva la hora actual del sistema en forma de valor entero sin cambiar ningún valor.
Posteriormente se procede a utilizar la técnica del residuo para obtener nuestro numero aleatorio, recordemos que al dividir un numero A entre un numero B el residuo podrá presentar valores entre 0 y (B-1), por ejemplo al dividir cualquier numero entero entre 10 el residuo de la operación presentara valores entre 0 y 9. Veamos si queremos generar números aleatorios entre 0 y 100 bastaría con colocara la siguiente instrucción:
int aleatorio;
aleatorio = rand()%101;
en pocas palabras cualquier numero entero al dividirse entre 101 presentará en el residuo de la operación números aleatorios entre 0 y 100. Veamos otros ejemplos.
Ejemplo Nro. 1: Números aleatorios entre 50 y 376:
como la diferencia en 376-50=326, bastaría con dividir entre 327 para obtener en el residuo de la operación números entre 0-326,
aleatorio = 50+ rand()%327;
Ejemplo Nro. 2: Números aleatorios entre -200 y 150:
como la diferencia en 150-(-200)=350, bastaría con dividir entre 351 para obtener en el residuo de la operación números entre 0-350,
aleatorio = -200+ rand()%351;
Ejemplo Nro. 3: Números aleatorios entre -0.31 y 0.55:
como la diferencia en 55-(-31)=86, bastaría con dividir entre 87 para obtener en el residuo de la operación números entre 0-86 y luego el resultado dividirlo entre 100.
float aleatorio;
aleatorio = (-31+ rand()%87);
aleatorio=aleatorio/100;
Nota: función rand() retorna enteros, su presencia en cualquier ecuación generará un numero entero, en consecuencia la división entre 100 debe hacerse después de generarse el numero entero. Basados en el ultimo ejemplo elaboremos un programa que genere 10 números aleatorios entre -0..31 y 0.55 cada vez que se genere un numero la PC producirá un sonido de 250 Hertz con duración de un cuarto de segundo, para esto usaremos la instrucción "Beep" de la biblioteca "Windows.h":
PROGRAMA
/*Ejemplo números aleatorios y Beep
elaborado por Carlos Ferrer
rev. Abril 2023*/
#include <iostream>
#include <windows.h>
#include <time.h>
using namespace std;
int main()
{
float aleatorio;
srand(time(NULL)); // Indica que la fuente (Source) de números aleatorios es el contador la hora actual
for (int i = 0; i < 10; i=i+1)
{ // generamos 10 números aleatorios
aleatorio = (-31+ rand()%87);
aleatorio = aleatorio/100;
// generamos un número aleatorio entre -0.31 y 0.55 (usando el residuo de la división entre 87)
Beep(250,250);
// El sonido tarda 250 ms completemos el segundo colocandoles una espera de 750ms
Sleep(750);
cout << aleatorio << " / "; // mostramos el número generado
}
}
No hay comentarios.:
Publicar un comentario