[?] Me ayudan a entender el porque de este código?

Iniciado por mastersuv, 9 Julio 2011, 06:08 AM

0 Miembros y 1 Visitante están viendo este tema.

mastersuv

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?

Akai

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.