Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.
Numeros Aleatorio please
Enviado por _malcom_ el día 29 de enero de 2005
Hola amig@s,
Me gustaria que alguien me dijiera como puedo generar numeros aleatorios... pero no numeros aleatorios cualesquieran sino con una restriccion, allá va...
Necesito que sean del 00 al 36, ambos incluidos, y como veis son de dos cifras, es decir... [ 00, 01,02....14...36 ]
Esta formula no sirve completamente, ya que repite la misma secuencia de numeros aleatorios cada vez que se ejecuta. ¿Como hago para que cambie cada vez que ejecuto el programa sin tener que cambiar el codigo cada vez que lo ejecuto?
He probado con las librerias <math.h>, <time.h> y las anteriores, me sigue saliendo el mismo error, quizas sea del compilador?? utilizo el DEV C++ no se que hacer.... el codigo esta bien?
yo utilizoel visual c++. y para generar numeros aleatorios utilizo la cabecera stdlib.h , despuesgenero una semilla ,la cual toma el tiempo en milisegundos, entiendes mira es algo asi....
void main (void)
{int num;
srand(time(NULL)); // aki generamos la semilla.....
num=rand()%10; // esto me genera numeros del 0 al 9
/* ahora si tu kieres generar el 00, el 01, el 02, tienes ke hacer algo asi*/
if(num«10)
{
/* aki tu puedes hacer ke lo imprima un cero adelante y luedo el numero generado aletoriamente:*/
cout««"0"««num;
/* o si no lo kieres hacer asi de alguna forma tines ke almacenarlo en un char para ke te reconozca el 0 antes del numero pes ok..... bye
}
}
si kires ke te esxpike mas agregame y te puedo ayudar arkahe@hotmail.com
No funciona como quiero arkahe, se como generar el 0 delante de los numeros q no tienen 2 digitos, el problema es que no encuentro la funcion que genere numeros aleatorios (q se puedan repetir) del 0 al 36
Lo de la semilla que pusiste, la utilizas para que coja los segundos del reloj para generar los numeros, es así? o me equivoco? la cosa es q si ejectutas el programa varias veces seguidas te salen los mismos numeros... vuelvo a repetir q no me importa que se repitan pero no 3 ni 4 veces seguidas jejjeje no es muy logico...
Cada vez que se ejecuta la funcion randomize() se reinicia el generador de numeros aleatorios tomando como referencia la hora del sistema con una precision de milesimas de segundo, si se ejecuta esa funcion mas de una vez en un tiempo menor a una milesima se obtiene el mismo numero de comienzo y quizas es eso lo que te esta sucediendo.
Deberias poner dicha funcion al principio del programa de manera que solo se la llame una vez, o donde desees reiniciar la secuencia de numeros, o incluso no ponerla si deseas que se repita la misma secuencia cada vez que inicies el programa.
un saludo a todos, soy nuevo, voy a echar un vistazo a la pagina, quizas me quedo
Ya suponia que pasaba algo así... pero como puedo solucionarlo? yo quiero generar tantos numeros aleatorios como el usario diga y luego escribirlos en un fichero de texto.
En teoria si el usuario dice una cantidad de 20, se generan 20 numeros, pero a q velocidad?? las maquinas son muy rapidas jejjeje no quiero que salgan los mismos numeros, no seria realista, nose si me explico? hay alguna forma para relentizar un poco los numeros? nose alguna solucion please!????
La funcion randomize() reinicia la secuencia de numerosa basandose en la hora del sistema usando la hora, minutos, y segundos (sin las milesimas como dije anteriormente) por lo tanto utilizar esa funcion en un tiempo menor a un segundo no tiene sentido porque se reiniciara en el mismo valor de comienzo. Cuando se obtienen sucesivamente valores con rand() estos forzosamente tienen que ser diferentes cada vez, porque se obtiene con un calculo matematico a partir del anterior numero generado.
asegurate de que randomize() solo se ejecuta una vez al comienzo del programa, y luego haz llamadas sucesivas a randon(37) para obtener un valor diferente cada vez, debe funcionar.
Enviado por Alejandro_ el día 2 de febrero de 2005
Bueno, ya casi lo tienes...
Si se trata del lenguaje C:
las funciones "random" y "randomize" no están en la biblioteca estándar, son funciones adicionales que ofrecían algunos compiladores.
De acuerdo con el mensaje de error:
"iostream.h: No such file or directory"
se trata de un compiladro de C++, así que hay que considerar que estás tratando de compilar código viejo con un compilador nuevo:
Desde hace algo más de diez años que las bibliotecas
stdlib.h , time.h y iostream.h ya no forman parte del C++; en su lugar, y sólo porque se trata de continuar la compatibilidad con el lenguaje C, las bibliotecas son:
<cstdlib>, <ctime> e <iostream>
//Si tu compilador de C++ se quejara de algo, cámbialo.
Alejandro
Uno de los problemas es que tratas de usar código viejo con un compilador nuevo. Desde hace algo más de diez años que stdlib.h, time.h y iostream.h ya no pertenecen al lenguaje C++
Alejandro_ sigue sin coger la biblioteca <iostream>,
El compilador que uso es "Dev-C++" deberia usar un compilador mas antiguo para que me funcionara?? cual usais vosotros, donde lo consigo, he probado instalar varios como el cygwin y otro (pero no me acuerdo del nombre) y tuve problemas, y hasta el momento el DEV++ me va de coña, lo unico que no voy a poderrrr compilar el numero aleatorio de ninguna forma???? juerrr...
y por qué no quitas la librería iostream.h??? esa librería contiene las funciones cin y cout entre otras, y por lo que veo tu usas printf() y scanf(), por tanto pon en lugar de iostream.h stdio.h.
El código quedaría mas o menos así:
srand((unsigned)time(NULL));
while(x<=6)
{
num=randon(37);
//num=rand()%37;
printf(\"%d\",num);
}
}
Si lo que quieres es detener el programa durante unos milisegundos prueba las funciones, Sleep() de windows.h, o sleep() o delay() de dos.h creo.
Espero que ahora te funcione,
un saludo.
Jurr si quito la libreria iostream, me dice el siguiente error
[Linker error] undefined reference to `randon'
asi que... no se que pasa, si vosotros podeis compilarlo y yo no, esta claro que el problema es mio ¬¬! pero utilizo el DEV-C++ para compilarlo Alejandro, tu tb?? y te deja compilarlo??
Enviado por Alejandro_ el día 4 de febrero de 2005
Sí, uso el Dev-C++, con el mismo código que escribí arriba.
Lo que seguramente vas a necesitar es algún libro de C++, donde no vas a encontrar "randon" ni "random", ni mucho menos "randomize". Y si en tu nuevo libro llegase a figurar #include <iostream.h>, devuélvelo.
Enviado por el_capo_de_c el día 18 de junio de 2006
a mi me anda el randomize(), pero uso borland c, del año del arquero
no se si es rand(limite) o random(limite), pero generan numeros al azar realmente solo si ejecutaste la funcion randomize()
creo q randomize() esta en time.h y rand/om() en stdlib.h
NO da un número aleatorio UNIFORMEMENTE distribuido entre 0 y 36.
Explicacion:
La cantidad de valores distintos queda rand() NO es multipo de 37
y por tanto la distribución NO es uniforme.
La probabilidad de sacar 0 ó 1 es ligerísimamente superior a sacar 35 o 36 (por poner un ejemplo).
Explico de nuevo con un ejemplo:
suponer que rand() da número aleatorios entre 0 y 9
y nosotros queremos numeros aleatorios entre 0 y 2
si aplicamos n=rand()%3 está claro que tenemos un número entre 0 y 2 PERO:
el 0 sale con: 0,3,6,9
el 1 sale con: 1,4,7
el 2 sale con: 2,5,8
es decir, es mas probable que salga el 0 !!!
Enviado por ubuntero07 el día 1 de octubre de 2008
Mira yo trabajo en linux y lo he compilado con gcc y g++ y te servira de esta manera
compilado asi :
gcc nombre.c -o nombre.exe
#include <stdio.h>
#include<time.h>
int main()
{
int i, num;
srand((unsigned)time(NULL));
for(i=0; i<10; i++)
{
num=rand()%37;
if (num<10)
printf("\nEl numero aleatorio %i es ..: 0%i", i, num);
else
printf("\nEl numero aleatorio %i es ..: %i", i, num);
}printf("\n");
Enviado por MiguelViba el día 19 de noviembre de 2008
Podría decirme alguien la forma de sacar Nºs aleatoriosentre el 10 y el 20 por ejemplo? con el % y el número te saca los Nºs del 0 al número. Como se puede acotar el valor inferior de los Nºs aleatorios?