Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: d91 en 30 Agosto 2015, 16:52 pm



Título: numeros aleatorios con rand
Publicado por: d91 en 30 Agosto 2015, 16:52 pm
hola a todos, deseo comprender una linea de codigo que me dieron, es de numeros aleatorios con rand
Código
  1. numero=rand() % 100 + 1 <= 50 ? 1 : 2;
entiendo la parte que dice que el numero sera entre 1 y 100, pero ya no entiendo donde es menor o igual a 50, entre 1 y 2 agradezco su orientacion


Título: Re: numeros aleatorios con rand
Publicado por: engel lex en 30 Agosto 2015, 17:58 pm
el "?" es un if simplificado... basicamente ese codigo se traduce como

Código:
numero = rand() % 100 + 1;
if(numero <= 50){
  numero = 1;
}else{
  numero = 2;
}


Título: Re: numeros aleatorios con rand
Publicado por: Bob1098 en 30 Agosto 2015, 18:49 pm
Me ha surgido una duda con ese código. No sería mucho más fácil generar un numero aleatorio entre 1 y 2?. Igual me equivoco y si es así ruego que se me corrija...

Código
  1. int i = rand() % 2 + 1;
  2.  


Título: Re: numeros aleatorios con rand
Publicado por: engel lex en 9 Septiembre 2015, 04:22 am
si, es más facil... solo que esa persona quiso hacerlo como si fuera un porcental... pero al final de cuentas da lo mismo


Título: Re: numeros aleatorios con rand
Publicado por: v4char en 9 Septiembre 2015, 04:45 am
Tengo una duda cuando haces un rand en C siempre que ejecutes en ese ordenador te va a dar el mismo número?


Título: Re: numeros aleatorios con rand
Publicado por: engel lex en 9 Septiembre 2015, 05:00 am
si no inicializas con una semilla, si, básicamente es porque se basa en una formula, e inicializar sin semilla es equivalente a iniciar con 0...

para eso usas
Citar
srand (time(NULL));

le pasará como semilla la fecha actual (unix)


Título: Re: numeros aleatorios con rand
Publicado por: someRandomCode en 9 Septiembre 2015, 21:12 pm
si no inicializas con una semilla, si, básicamente es porque se basa en una formula, e inicializar sin semilla es equivalente a iniciar con 0...

para eso usas
le pasará como semilla la fecha actual (unix)

OJO con eso, no siempre.. En Linux/*BSD el kernel tiene una fuente de entropia para garantizar que srand/rand tengan valores diferentes aun si la semilla es la misma..
Utilizan la mas de las veces el motor de generacion de numeros aleatorios (ok, nunca aleatorios, pseudo aleatorios) que esta integrado en la pastilla con instrucciones dedicadas a ello..