<div dir="ltr">Hola Francisco José,<div class="gmail_extra"><br>2013/1/19 Francisco Jose Sanchez-Caro Abril <span dir="ltr"><<a href="mailto:fjsanchezcaro@gmail.com" target="_blank">fjsanchezcaro@gmail.com</a>></span><br>
<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><br><div class="gmail_quote">
Gracias Steven!<br></div><div class="gmail_quote"><div><br></div><div>Me han sido de gran ayuda tus consejos. Ahora la función se comporta de una forma más "natural", aunque, el primer lanzamiento es siempre el 6. ¿Se podría, aún, mejorar este aspecto y hacer algo para que salga otro número la primera vez que se invoca a la función?</div>

</div>
</div>
<br></blockquote><div><br></div><div style>Hemos iniciado el generador basándonos en la hora (y fecha) cuando se ejecute el programa. Es normal que se elija el mismo generador si ejecutas el programa varias veces seguidas, ya que no da tiempo a elegir a otro generador.</div>
<div style><br></div><div style>También ten presente que elegimos valores entre 0 y 'RAND_MAX', que suele ser un entero bastante grande, que luego serán "convertidos" a enteros entre 1 y 6. Por lo tanto, es muy probable que obtengas valores repetidos, ya que el 6 es el resultado a partir de un entero de entre miles generados. Por ejemplo, si 'RAND_MAX' es 2147483647, la función 'rand()' puede generar valores entre 1789569707 y 2147483647 que resultarán en el valor de 6. Por lo tanto, cualquier valor inicial generado pseudo-aleatoriamente que comprenda en el intervalo anterior dará 6 como resultado al lanzamiento del dado.</div>
<div><br></div><div style>Otra solución puede ser usando el operador del módulo de una división, como hiciste originalmente, pero habría que comprobar que todos los valores generados por 'rand()' "quepan" en grupos de 6; es decir, 'RAND_MAX' + 1 debe ser divisible entre 6, para que el dado siga una distribución uniforme de probabilidad. En el ejemplo anterior, podríamos hacer esto:<br>
<br></div><div style>Para el intervalo: [0,2147483645]:</div><div style>  dado = 1 + rand()%6;</div><div style><br></div><div style>Para el intervalo: [2147483646,2147483647]<br></div><div style>  Los ignoramos y repetimos el proceso; no es la solución más idónea, pero sí la más práctica</div>
<div><br></div><div style>Podríamos, escribir esto:<br><br>int Dado()</div><div style>{<br>  int n;</div><div style><br></div><div style>  do</div><div style>    n = rand();</div><div style>  while( n > 2147483645 );</div>
<div style><br></div><div><div>  return 1 + n%6;</div></div><div>}</div><div><br></div><div><br></div><div style>La otra solución es usar otro algoritmo para generar números pseudo-aleatorios, pero no creo que necesites hacer esto.</div>
<div><br></div><div><br></div><div>Espero que todo esto te sirva.</div><div><br></div><div style>Steven</div></div></div></div>