[C con Clase] implementar función dado

Davidson, Steven srd4121 en njit.edu
Vie Ene 18 19:52:41 CET 2013


Hola Francisco José,

2013/1/18 Francisco Jose Sanchez-Caro Abril <fjsanchezcaro en gmail.com>

> Hola!
>
> Desearía implementar una función que simulase el lanzamiento de un dado de
> seis caras.
>
> He usado este código:
>
>
Veamos el código fuente.

int hora = time(NULL);
> int dado = 0;
>
> int TirarDado(int &hora, int &dado){
>
>
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á.

    void srand(unsigned hora);
>

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).

Deberías hacer esto:

srand( hora );

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,

int main()
{
  srand( time(NULL) );  // La única llamada a 'srand()' en este programa
  ....
}

    dado = 1 + rand()%6;
>
>

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:

dado = 1 + (int)( 6.0 * rand() / (RAND_MAX+1.0) );

    return dado;
> }
>
>
Espero que esto aclare las dudas.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130118/32207f3e/attachment.html>


Más información sobre la lista de distribución Cconclase