Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mastersuv en 9 Julio 2011, 06:08 am



Título: [?] Me ayudan a entender el porque de este código?
Publicado por: mastersuv en 9 Julio 2011, 06:08 am
Creo que esta es la segunda vez que uso este foro para resolver una duda, y espero estarlo haciendo de la forma correcta... No tuve tiempo de leerme las reglas completamente, pero en fin jejej ya habrá otro momento...

Estoy programando en C++ y jugando un poco con números aleatorios (srand y rand) llegue a la duda de como limitar un rango para sacar dichos números aleatorios... y encontré lo siguiente:

n = (rand()%(max-min+1))+min;

Donde max, seria el numero máximo, y min el mínimo...
mi duda es... porque así? No entiendo la lógica matemática ._. alguien me puede explicar?


Título: Re: [?] Me ayudan a entender el porque de este código?
Publicado por: Akai en 9 Julio 2011, 10:15 am
rand() da un rango da un numero entre 0 y dios sabe qué. Si mal no recuerdo es un circuito del procesador dedicado específicamente a eso.

Entonces, cómo limitas el máximo número que te va a salir? operación módulo ( % )

En el caso que tu expones, se está sacando un número entre max y min de la siguiente forma:

diff= max-min+1

aleatorio= rand() % diff --> es decir, el resto de dividir el resultado de rand entre diff.

n= diff+min.

de esta forma obtienes primero la diferencia entre max y min, generas un número entre esa diferencia, y luego le sumas min para que el resultado sea haber generado un número entre max y min.