Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Felipe_Henriquez en 31 Octubre 2011, 18:59 pm



Título: Ayuda con la función rand.
Publicado por: Felipe_Henriquez en 31 Octubre 2011, 18:59 pm
Muy buenas, hace tiempo ya no creaba un nuevo tema....
He estado estudiando C y he llegado a funciones, pero la función rand de <stdlib.h> no logro comprenderla, cito el enunciado del libro de C que estudio....

La función rand genera un entero sin signo entre 0 y RAND_MAX suponiendo que RAND_MAX es 32767, hasta ahi todo bien se que rand(), genera un numero entre 0 y 32767 al azar...
Cito nuevamente: El rango de valores que produce rand de manera directa, a menudo difiere del requerido por la aplicación. Por ejemplo, un programa que simula el lanzamiento de una moneda sólo requiere 0 para "cara" y 1 para "cruz". Un programa que simula el tiro de un dado de seis lados requiere enteros al azar entre 1 y 6. Para demostrar la función rand, desarrollemos un programa que simule 20 tiros de un dado de seis lados y que despliegue el valor de cada tiro. El prototipo de función para la función rand se puede encontrar en <stdlib.h> para producir números en rango de 1 a 5, utilizamos el operador módulo (%) junto con rand de la siguiente manera: rand() % 6.
Hasta ahí quedo totalmente desorientado, no se supone que genera valores al azar entre 0 y rand max? para que sirve el módulo?....
Un ejemplo inocente de como trato de entenderlo si genera un valor de 0 entre RAND_MAX: supongamos generó 1000 y le saca el resto 6 generaria un 4 no?, la verdad no entiendo....
Desde ya gracias, si tuviera profesor de programación no preguntaría, les agradezco por haber leido y más a los que contestan un abrazo!.


Título: Re: Ayuda con la función rand.
Publicado por: Queta en 31 Octubre 2011, 19:32 pm
Es lógico ya que, por ejemplo, dado el numero 10, si dividimos cualquier número real por éste, su resto/módulo siempre será 0, 1, 2, 3, 4, 5, 6, 7, 8 o 9; por consiguiente:

Código
  1. (rand() % 10) + 1

El resultado de esta operación siempre será un número entre 1 y 10. El ejemplo mismo aplicado al dado, podría ser:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6. int numero_dado = (rand() % 6) + 1;
  7.  
  8. printf("%d", numero_dado);
  9.  
  10.  
  11. return 0;
  12. }


Título: Re: Ayuda con la función rand.
Publicado por: Felipe_Henriquez en 31 Octubre 2011, 20:08 pm
Gracias Queta por tu respuesta....

int numero_dado = (rand() % 6) + 1;

Haber si lo entiendo:
rand va a generar un numero aleatorio cualquiera cierto? supongamos saca el 2000 y le aplica el modulo de 6 o resto.... 6 * 333 = 1998 y su resto 2. Y ¿para que le sumamos el 1? eso daria 3.... no? el sumarle 1 que nos asegura? que si da resto 0 tengamos el numero de dado 1 no? y como resto 6 no puede dar bajo ningún motivo, llegamos a él  sumando 1 a resto 5.... si es así creo que comprendí a la perfección muchas gracias de verdad por tu ayuda y espero su respuesta para corregir o para corroborar mi información muchas gracias abrazo!.


Título: Re: Ayuda con la función rand.
Publicado por: Queta en 31 Octubre 2011, 20:14 pm
Exactamente, es para evitar que salga el 0. Siguiendo la lógica de rand + módulo se podría haber pensado el siguiente ejemplo para sacar el número de un dado:

Código
  1. int numero_dado = rand() % 7;

Pero lo que pasaría es que obtendrías un número entre 0 y 6, luego si se sumara 1 quedaría entre 1 y 7, y el 7 no existe en un dado de 6 caras.


Título: Re: Ayuda con la función rand.
Publicado por: Felipe_Henriquez en 31 Octubre 2011, 20:19 pm
Uh de verdad que te pasaste  ;D Queta, no estudio formal ni nada soy un programador empirico, haber si el próximo año ya puedo formalizar estudios un gran abrazo!


Título: Re: Ayuda con la función rand.
Publicado por: Queta en 31 Octubre 2011, 20:20 pm
Venga, mucha suerte ;D.