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 ;)
Puedes entienderlo se lees esto:
http://msdn2.microsoft.com/en-us/library/8zedbtdt(VS.80).aspx
Salu2
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 ;)
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
Gracias por la información...pero sigo sin saber en que depende el resultado del valor de semilla?
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.
CitarIf you omit Number, the value returned by the system timer is used as the new seed value.
Salu2
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 ;)
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
CitarLa 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 4o
Randomize 76y 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 ;)
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.
yo primoro hice esto
Public Function Rand(ByVal Low As Long, _
ByVal High As Long) As Long
Rand = Int((High - Low + 1) * Rnd) + Low
End Function
despues
Text4.Text = Rand(10, 99)
ahora salen numero aleatorio entre el 10 y 99.. o si quieres lo podes cambiar.. en eso rangos
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 ;)
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..!!
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:
Public Function encriptacion(ByVal texto As String, ByVal semilla As Byte)
Dim contador As Long
Dim caracter As Long
Dim paso As Long
'Inicializacion del Random
Rnd (-1)
Randomize (semilla)
For contador = 1 To Len(texto)
paso = CInt(semilla * Rnd())
caracter = Asc(Mid(texto, contador, 1))
encriptacion = encriptacion & Chr(caracter Xor paso)
Next
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 ;)
A ver si esto te ayuda
'---------------------------------------------------------------------------------------
' 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
Que se supone que hace ese código?
Saludos ;)
En una implementacion de la funcion Rand de C. Mas un shuffle, pero es lo que vos preguntas.