<div dir="ltr">Hola Francisco José,<div class="gmail_extra"><br><div class="gmail_quote">2013/1/18 Francisco Jose Sanchez-Caro Abril <span dir="ltr"><<a href="mailto:fjsanchezcaro@gmail.com" target="_blank">fjsanchezcaro@gmail.com</a>></span><br>
<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">Hola!<div><br></div><div>Desearía implementar una función que simulase el lanzamiento de un dado de seis caras.</div>
<div><br></div><div>He usado este código:</div><div><br></div></div></blockquote><div><br></div><div style>Veamos el código fuente.</div><div><br></div><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"><div></div><div><div><div>int hora = time(NULL);</div>
<div>int dado = 0;</div><div><br></div><div><div>int TirarDado(int &hora, int &dado){</div><div><br></div></div></div></div></div></blockquote><div><br></div><div style>No veo que sea necesario pasar por referencia estos valores. Además, no tiene mucho sentido aceptar el resultado del 'dado', ya que esta función lo retornará.</div>
<div><br></div><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"><div><div><div><div></div><div>
    void srand(unsigned hora);</div></div></div></div></div></blockquote><div><br></div><div style>Esto es un prototipo y no la invocación (o llamada) a una función. Por lo tanto, nunca cambiarás el valor semilla (inicial) del generador de números pseudo-aleatorios (PRNG en inglés).<br>
</div><div><br></div><div><div>Deberías hacer esto:<br><br>srand( hora );</div></div><div><br></div><div style>Sin embargo, basado en el diseño de este PRNG, deberías invocar esta función UNA sola vez en todo tu programa. Aconsejo invocarla nada más comenzar 'main()'; o sea,</div>
<div style><br></div><div style>int main()<br>{<br>  srand( time(NULL) );  // La única llamada a 'srand()' en este programa</div><div style>  ....<br>}</div><div><br></div><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"><div><div><div><div>    dado = 1 + rand()%6;    </div><div>      </div></div></div></div></div></blockquote><div><br></div><div style>Aunque esto funcione, en general, no es la mejor conversión a nuestro intervalo. Deberíamos cambiar de intervalo, no simplemente cortar por lo sano, como se suele decir. Se prefiere esta fórmula:<br>
<br>dado = 1 + (int)( 6.0 * rand() / (RAND_MAX+1.0) );</div><div><br></div><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"><div><div><div><div>    return dado;  </div>
<div>}</div></div><div><br></div></div></div></div></blockquote><div><br></div><div style>Espero que esto aclare las dudas.</div><div style><br></div><div style>Steven</div><div style><br></div></div></div></div>