Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: nhaalclkiemr en 12 Septiembre 2007, 00:21 am



Título: Randomize y Rnd
Publicado por: nhaalclkiemr en 12 Septiembre 2007, 00:21 am
Weno, siempre me interesó generar números aleatorios...

Sin embargo al llegar a VB me encuentro que no son tan "aleatorios", pues dependen de un valor de semilla (no se que és)

Weno mi pregunta es saber para que sirve el valor de semilla, es diferente "Randomize 10" que "Randomize 500", que pasa? que uno va a tener más posibilidades de que salga un numero y otros otro?

¿Y porque hay que siempre empezar el generador de numeros aleatorios?

¿En que influyen los argumentos de Rnd en su resultado?

Weno, me gustaría que me respondierais a esas preguntas

Un saludo  ;)


Título: Re: Randomize y Rnd
Publicado por: Tughack en 12 Septiembre 2007, 01:22 am
Puedes entienderlo se lees esto:

http://msdn2.microsoft.com/en-us/library/8zedbtdt(VS.80).aspx

Salu2


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 13 Septiembre 2007, 14:13 pm
Eso ya lo sé...weno, está en inglés pero es la misma información que aparece pulsando F1 desde VB (tengo MSDN instalado)

Yo sé generar números aleatorios...solo me interesa saber (por curiosidad) en que influye el valor de semilla en el resultado

Saludos ;)


Título: Re: Randomize y Rnd
Publicado por: Tughack en 13 Septiembre 2007, 14:29 pm
La verdad es k el randomize solo sirve para generar una semilla. Se no lo usas el Rnd no deja de generar un numero aleatorio pero siempre con la misma semilla.

Msgbox int(rnd * 10) te genera un numero aleatorio entre 0 y 9 y sin usar el randomize...

Salu2


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 13 Septiembre 2007, 15:10 pm
Gracias por la información...pero sigo sin saber en que depende el resultado del valor de semilla?


Título: Re: Randomize y Rnd
Publicado por: Tughack en 13 Septiembre 2007, 15:40 pm
La funcion randomize pasa la semilla al Rnd. Por ejemplo se kieres k la semilla sea 15 haces asi Randomize(15). Como esta en el msdn, se no pones nada (osea solo Randomize()) la semilla es generada con el system timer.

Citar
If you omit Number, the value returned by the system timer is used as the new seed value.

Salu2


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 13 Septiembre 2007, 17:07 pm
Ya lo sé...lo k quiero saber es en que influye el valor de semilla en el resultado aleatorio que genera...me entiendes ahora?

Saludos ;)


Título: Re: Randomize y Rnd
Publicado por: Tughack en 13 Septiembre 2007, 17:43 pm
Ya viste k a todo lo k te digo dices k ya lo sabes??? Se sabes pork perguntas?

La verdad esa es una pergunta idiota...

De una vez por todas...

El randomize genera una semilla basada en un numero k le das o se lo omites en el system timer.

Creo k funciona mas o menos asi:

randomize > procesa el comando > los numeros avanzan > se detene y devuelve el numero. pero no tienes k saber nada de esto, yo no estoy seguro k esto sea exactamente asi. Se kieres ir mas fondo en el asunto ponete a leer articulos de microsoft, seguro k encontras explicaciones. Yo no pierco tiempo con eso, sry..

El rnd es = a la semilla k te devuelve el randomize... Desde el rnd obtenes un valor por ejemplo 0,7055475... Este es tu numero random... Despues solo tienes k multiplicarlo para obtener un numero random dentro del intervalo k kieres..

salu2


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 13 Septiembre 2007, 20:37 pm
Citar
La verdad es k el randomize solo sirve para generar una semilla. Se no lo usas el Rnd no deja de generar un numero aleatorio pero siempre con la misma semilla.

Aí me dejaste clara una de mis dudas...

Pero tenía otra que era en que influía ese valor de semilla...no tienes que ponerte así...se generar números aleatorios...yo quería saber la diferencia de usar:

Randomize 4

o

Randomize 76

y también de esta:

Rnd(34)

o

Rnd(25)


Todos son números aleatorios con diferentes valores de semilla, lo que pregunto es en que influye ese valor de semilla en el valor aleatorio final...si no lo sabes o no lo quieres decir o no te importa pues ya me contestaste una duda...gracias...pero ahora pregunto otra cosa

Saludos y gracias ;)


Título: Re: Randomize y Rnd
Publicado por: wACtOr en 13 Septiembre 2007, 21:57 pm
weno yo no estoy muy seguro, pero supongo que el random se basara en las tablas de multiplicar,no lo se. suponiendo que sea asi si le pones por ejemplo 4 ara operaciones multiplicando, dividiendo, sumando, restnado, etc a partir del 4, si pones un 59384, ara las operaciones basandose en esa semilla.

repito, no se si esto es asi, por que nunca e utilizado randomize, es una teroria.

aver si viene alguien que sepa mas y lo puede confirmar.



Título: Re: Randomize y Rnd
Publicado por: satan69 en 15 Septiembre 2007, 19:35 pm
yo primoro hice esto

Código:
Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long
  Rand = Int((High - Low + 1) * Rnd) + Low
End Function


despues

Código:
Text4.Text = Rand(10, 99)

ahora salen numero aleatorio entre el 10 y 99.. o si quieres lo podes cambiar.. en eso rangos


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 16 Septiembre 2007, 00:08 am
Ya gracias pero eso ya lo sé...

El único que al parecer me  fue wACtOr...sé usar Rand perfectamente, simplemente me preguntaba por curiosidad en que influye el valor de semilla en el resultado final...pero weno parece k nadie sabe pork simplemente no tiene mucha importancia..

Saludos ;)


Título: Re: Randomize y Rnd
Publicado por: Freeze. en 16 Septiembre 2007, 00:26 am
Bueno yo probe con 3 textbox y Rnd 1, Rnd 2, Rnd3(respectivamente) luego puse Randomize 1 y el primer valor variaba, luego Randomize 2 y el segundo valor cambiaba y asi sucesivamente....

A lo mejor es eso, a lo mejor no lo es..!!


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 17 Septiembre 2007, 22:28 pm
Yo esto también lo preguntaba por esto. Mirad este ejemplo de cifrado de strings XOR dependiente de un número aleatorio, dependiendo de la semilla que le pases el resultado será uno u otro y siempre será el mismo si utilizas el mismo valor de semilla:

Código
  1. Public Function encriptacion(ByVal texto As String, ByVal semilla As Byte)
  2.  
  3.     Dim contador As Long
  4.     Dim caracter As Long
  5.     Dim paso As Long
  6.  
  7.     'Inicializacion del Random
  8.     Rnd (-1)
  9.     Randomize (semilla)
  10.  
  11.     For contador = 1 To Len(texto)
  12.         paso = CInt(semilla * Rnd())
  13.         caracter = Asc(Mid(texto, contador, 1))
  14.         encriptacion = encriptacion & Chr(caracter Xor paso)
  15.     Next
  16.  
  17. End Function

La cifrado es muy sencilla, es una cifrado de 8 bits (XOR-8bits VS AES-256bits  :xD ) pero que puede ser util si el interceptor no sabe el algorítmo

Saludos ;)


Título: Re: Randomize y Rnd
Publicado por: cobein en 18 Septiembre 2007, 20:37 pm
A ver si esto te ayuda

Código:
'---------------------------------------------------------------------------------------
' Module    : mRand
' DateTime  : 06/07/2007 04:13
' Author    : Cobein
' Mail      : cobein27@yahoo.com
' Purpose   : Microsoft C v4.0 rand() + shuffle output
'---------------------------------------------------------------------------------------
Option Explicit

Private m_bvBox(255) As Byte
Private m_dSeed As Double

Public Function Rand() As Byte
    Dim lRet As Long
    '// Rand Function
    m_dSeed = CustomMod((214013 * m_dSeed + 2531011), 2 ^ 31)
    lRet = Int(m_dSeed / 2 ^ 16)
    '// Shuffle our box
    ShuffleBox lRet
    '// Return Value
    Rand = m_bvBox(0)
End Function

Public Sub Randomize(ByVal lVal As Long)
    Dim i As Long
    '// Initialize Box
    If m_dSeed = 0 Then '// Just to prevent from reorganizing the elements in the array once initialized.
        For i = 0 To 255
            m_bvBox(i) = i
        Next
    End If
    '// Set the seed
    m_dSeed = lVal
End Sub

'// Custom mod to prevent overflow
' This is not mine is from a RSA implementation I found on PSC
Private Function CustomMod(ByVal dVal1 As Double, ByVal dVal2 As Double) As Double
    CustomMod = dVal1 - (Int(dVal1 / dVal2) * dVal2)
End Function

Private Function ShuffleBox(ByVal lVal As Long)
    Dim lKeyLen As Long
    Dim bvKey() As Byte
    Dim i As Long
    Dim j As Long
    Dim bTemp As Byte
   
    bvKey() = StrConv(lVal, vbFromUnicode)
    lKeyLen = UBound(bvKey) + 1
   
    For i = 0 To 255
        '// Calculate the index
        j = (j + m_bvBox(i) + bvKey(i Mod lKeyLen)) Mod 256
        '// Swap values
        bTemp = m_bvBox(i): m_bvBox(i) = m_bvBox(j): m_bvBox(j) = bTemp
    Next
End Function


Título: Re: Randomize y Rnd
Publicado por: nhaalclkiemr en 18 Septiembre 2007, 22:17 pm
Que se supone que hace ese código?

Saludos ;)


Título: Re: Randomize y Rnd
Publicado por: cobein en 19 Septiembre 2007, 01:00 am
En una implementacion de la funcion Rand de C.  Mas un shuffle, pero es lo que vos preguntas.