elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como generar numeros aleatorios pares?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como generar numeros aleatorios pares?  (Leído 14,164 veces)
lucas59

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Como generar numeros aleatorios pares?
« en: 30 Septiembre 2014, 15:16 pm »

Hola gente como genero numero aleatorios pares ? con un rand


En línea

kutcher

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: Como generar numeros aleatorios pares?
« Respuesta #1 en: 30 Septiembre 2014, 15:34 pm »

Solo es cuestión de generar un rango de números aleatorios especificos y multiplicar los siguientes por dos ya que todo entero multiplicado por dos siempre sera un número par :

Código
  1. 2 * ((rand() % 25) + 1)


Esto genera pares aleatorios entre 1 y 50

Saludos kutcher


« Última modificación: 30 Septiembre 2014, 15:42 pm por kutcher » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Como generar numeros aleatorios pares?
« Respuesta #2 en: 30 Septiembre 2014, 16:37 pm »

Y si no te apetece tener que hacer cálculos en plan... necesito obtener pares de 0 a 50, por lo que tengo que reducir el rango de "rand" a 25... puedes simplemente poner a '0' el bit de menor peso del número obtenido:

Código
  1. int numero = ( rand( ) % 51) & 0xFFFFFFFE;

Esta versión te devuelve siempre un número par dentro del rango [0,50]. Como el número 0xFF... es un poco feo, puedes hacer uso de la librería limits.h para dejarlo un poco más correcto:

Código
  1. int numero = ( rand( ) % 51 ) & ( UINT_MAX - 1 )

En este caso, UNIT_MAX contiene el número más alto que se puede almacenar en un 'unsigned int'... dado que el 'unsigned int' ocupa exactamente lo mismo que un 'int' y, además, 'unsigned int' no necesita bit de signo, UINT_MAX es equivalente (en 32 bits) a 0xFFFFFFFF... si a ese número le restamos uno ya tenemos una máscara que es capaz de eliminar el bit que hace que los números sean impares.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Como generar numeros aleatorios pares?
« Respuesta #3 en: 1 Octubre 2014, 17:31 pm »

Si se quiere desactivar el bit menos significativo otra opción es obtener la mascara mediante el operador de complemento a uno con la ventaja de no necesitar la inclusión de <limits.h>:
Código
  1. num = rand() % 51 & ~1;

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Shout

Desconectado Desconectado

Mensajes: 191


Acid


Ver Perfil
Re: Como generar numeros aleatorios pares?
« Respuesta #4 en: 1 Octubre 2014, 18:12 pm »

Si se quiere desactivar el bit menos significativo otra opción es obtener la mascara mediante el operador de complemento a uno con la ventaja de no necesitar la inclusión de <limits.h>:
Código
  1. num = rand() % 51 & ~1;

Un saludo
Para los que no entienden el "~1":
Dado el hecho de que ~ invierte los bits (es la función inversa o complementaria en matemáticas) así:
~1001 pasa a ser 0110, ~1111 pasa a ser 0000, etc.

Entonces, sabiendo que "1" se representa así en binario:
0000 0000 | 0000 0000 | 0000 0000 | 0000 0001
(he separado los bits para que se lean fácilmente)
Su complemento es:
1111 1111 | 1111 1111 | 1111 1111 | 1111 1110

Entonces, [cualquier número] AND [máscara] es:
1101001010011011001101110001101
AND
1111111111111111111111111111110
----------------------------------------------------
1101001010011011001101110001100

Eliminando así el bit menos significativo, y haciendo que el número sea par.
En línea

I'll bring you death and pestilence, I'll bring you down on my own
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines