Necesito generar números aleatorios dentro de un rango, use la función 'rand' pero cada vez que ejecuto el programa me la LOS MISMOS valores aleatorios, y necesito que cada vez sea diferente! Leí de la función 'randomize' pero aun no se mucho sobre ella. Si me pueden ayudar, seria genial!
Gracias!
Actualización:También sucede que cuando uso 'randomize' de lanza un error de: "undefined reference to 'randomize'". =S El codigo que tengo es este:
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
using namespace std;
int main (){
int n, cont=0;
do{
randomize();
cout << 2 + rand() % 8 << endl;
cont = cont + 1;
}while (cont <= 3);
}
Copyright © 2024 ANSWERS.MX - All rights reserved.
Answers & Comments
Verified answer
En c++ no te puedo ayudar bro, pero en C es asi:
--------------------------------------------------------------
Generar números al azar (“números aleatorios”) usando C no es difícil. Si nos ceñimos al
estándar ANSI C, tenemos una función llamada “rand()”, que nos devuelve un número entero
entre 0 y el valor más alto que pueda tener un número entero en nuestro sistema.
Generalmente, nos interesarán números mucho más pequeños (por ejemplo, del 1 al 100), por
lo que “recortaremos” usando la operación módulo (“%”, el resto de la división).
Vamos a verlo con algún ejemplo:
Para obtener un número del 0 al 9 haríamos x = rand() % 10;
Para obtener un número del 0 al 29 haríamos x = rand() % 30;
Para obtener un número del 10 al 29 haríamos x = rand() % 20 + 10;
Para obtener un número del 1 al 100 haríamos x = rand() % 100 + 1;
Para obtener un número del 50 al 60 haríamos x = rand() % 11 + 50;
Para obtener un número del 101 al 199 haríamos x = rand() % 100 + 101;
Pero todavía nos queda un detalle para que los números aleatorios que obtengamos sean
“razonables”: los números que genera un ordenador no son realmente al azar, sino “pseudo-
aleatorios”, cada uno calculado a partir del siguiente. Podemos elegir cual queremos que sea el
primer número de esa serie (la “semilla”), pero si usamos uno prefijado, los números que se
generarán serán siempre los mismos. Por eso, será conveniente que el primer número se base
en el reloj interno del ordenador: como es casi imposible que el programa se ponga en marcha
dos días exactamente a la misma hora (incluyendo milésimas de segundo), la serie de números
al azar que obtengamos será distinta cada vez.
La “semilla” la indicamos con “srand”, y si queremos basarnos en el reloj interno del ordenador,
lo que haremos será srand(time(0)); antes de hacer ninguna llamada a “rand()”.
Para usar “rand()” y “srand()”, deberíamos añadir otro fichero a nuestra lista de “includes”, el
llamado “stdlib”:
#include <stdlib.h>
Si además queremos que la semilla se tome a partir del reloj interno del ordenador (que es lo
más razonable), deberemos incluir también “time”:
#include <time.h>
Vamos a ver un ejemplo, que muestre en pantalla un número al azar entre 1 y 10:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main() {
int n;
srand(time(0));
n = rand() % 10 + 1;
printf("Un número entre 1 y 10: %d\n", n);
}
mmm
No recuerdo muy bien, y no tengo tiempo de recompilar un programa, jeje, sin embargo si mal no recuerdo se llama la función randomize antes de generar cualquier número aleatorio y en el mismo 'contexto' en que uno va a generar los números.
Sí mal no recuerdo bastaba con llamarla una sola vez antes de comenzar cada secuencia de números aleatorios, dentro del mismo 'contexto'.
Sin embargo, para simulación y estudios de probabilidad y estadísticas no es correcto, ya que uno debe poder salvar, tanto la función aleatoria que usa y la semilla de esa función. debe haber otra función u algoritmo en la red...