Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: CAR3S? en 30 Diciembre 2010, 12:11 pm



Título: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 12:11 pm
Hola!

estoy usando este codigo :

x = Int(Rnd * 6)

me da decimales entre 0 y 6.

si yo uso por ejemplo

msgbox x, x, x,x

Voy a suponer que voy a obtener 4 numeros entre 0 y 6 distintos.
Pero no! (Muy obvio), ya que X vale un numero entre 0 y 6 , pero YA LO VALE, no cambia!.

Lo que yo necesito es que cambie :S:S:S

Alguien me dice como se hace?

GL!

edit: tendria que crear un bucle para que se repita la funcion y vuelva a dar valor.. alguna idea¿


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 12:21 pm
Eso mismo lo han preguntado hace unos días (sin tener en cuenta que se ha respondido muuuuchas veces), busca sobre Randomize

Saludos


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 12:21 pm
HOLA!!!

Mmm, creo que primero, cuando usas RND es preferible poner Randomize

Tomando tu codigo haria esto:
Suponiendo que no queres guardar los numeros que salgan:
Código
  1. Private Sub Msgbox_aleatorio()
  2.    Randomize
  3.    Msgbox Int(Rnd * 6), Int(Rnd * 6), Int(Rnd * 6),Int(Rnd * 6)
  4. End Sub
  5.  

Suponiendo que queres guardar los numeros que salgan:
Código
  1. Private Sub Msgbox_aleatorio()
  2.    Dim X(3) as integer
  3.    Randomize
  4.    For y = 0 To 3
  5.        X(y) = Int(Rnd * 6)
  6.    Next
  7.    msgbox X(0),X(1),X(2),X(3)
  8. End Sub

GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 12:24 pm
Miren, psa esto...

yo toco un boton, se establece el "Azar", y se edita un .txt remplazando la letra X por el numero al azar... por mas que use Randomize , la letra o numero q seria Azar sigue siendo la misma...

entonces, en el txt se remplazan todas las X por el mismo numero.
pero si toco 2 veces el boton, se remplazan las X por otro numero (Pero son todos iguales)


Título: Re: Se repite...
Publicado por: ABDERRAMAH en 30 Diciembre 2010, 12:36 pm
Se me ocurre: haz un timer con cierto retardo que genere uno de los números a sustituir cada vez y lo añada.


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 12:41 pm
HOLA!!!

Mira, no se si leiste el segundo ejemplo que te escribi, o si lo entendiste...

Solucion:Mas abajo

GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 12:47 pm
Sigue remplazando la X por el mismo numero.. Hay muchas X en el texto!, y las reemplaza por el mismo numero... M explico?


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 12:51 pm
No, no te explicas, aún no hemos visto el código que dices estar usando :rolleyes:


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 12:53 pm
Código
  1. sBuscar = "x"
  2.    Randomize
  3.    sPoner = Str(Int(Rnd * 6))
  4.  
  5.  

despues de eso se crea el txt.... balbal


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 12:56 pm
HOLA!!!

Solucion:

Código
  1. Private Function Reemplazar_Aleatorio(Texto_orig As String, caracter_a_sustituir As String)
  2. Randomize
  3. For x = 1 To Len(Texto_orig)
  4.    If Mid(Texto_orig, x, 1) = caracter_a_sustituir Then
  5.        Texto_orig = Mid(Texto_orig, 1, x - 1) & Int(Rnd * 6) & Right(Texto_orig, Len(Texto_orig) - x)
  6.    End If
  7. Next
  8. Reemplazar_Aleatorio = Texto_orig
  9. End Function
  10.  
  11. Private Sub Form_Load()
  12. texto_nuevo = Reemplazar_Aleatorio("holax, comox andax", "x")
  13. Debug.Print texto_nuevo
  14. End Sub


GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 12:59 pm
Es decir que tienes muuuchas X en un texto y quieres reemplazar cada una por algo diferente? es lo que interpreto, y apuesto a que estas utilizando replace así como así, con lo cual reemplazas todas por lo mismo :-X
Con lo cual, el código de 79137913 haría lo que estas pidiendo.
[offtopic]¡Viva los códigos hechos! ¡Que bonito es aprender a programar![/offtopic] :¬¬

Saludos


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 13:12 pm
HOLA!!!

Bueno, perdon Novlucker, es que a estas horas de la mañana en el trabajo me aburro y me entretengo haciendo algun que otro codigo XD.

Si queres no doy mas codes hechos :-/ , como vos digas.

P.D: Pfff , me retaron :( .

GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 13:29 pm
Hola!

No lo retes, es bueno (?) ^^.Gracias porel codigo!

Pero me queda una duda... Yo entre cada aleatorio tengo que escribir, por ejemplo...

holaALEATORIOchau


Como hago? No me sale :S

Edit, creo que ya vi la solucion, q tonto, no me di cuenta


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 13:32 pm
HOLA!!!

Aca si me pongo del lado de no darte mas código, tenes una estructura armada, modificala a tu gusto.

GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 13:33 pm
Si queres no doy mas codes hechos :-/ , como vos digas.

Eso no es decisión mía sino tuya, si quieres dar códigos es cosa tuya, no es algo que vaya contra las reglas, solo que tengo un concepto distinto y la mayoría de las veces intento que los usuarios aprendan algo por si mismo ;)
Sino luego pasa como antes, "y si quiero modificar esto?", "y si quiero agregar esto otro?", "y si ....", eso no es programar sino picar código.

Saludos


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 13:39 pm
Claaaro tiene razon,  ;D

Ahora un boludo como yo te pregunta si lo quiero modificar, y no entiende ni bosta.


Si me queres decir decime, y sino, veo como me arreglo (:

Igual gracias por el codigo!


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 13:57 pm
Pude hacerlo asi:

Código
  1. Private Function Reemplazar_Aleatorio(Texto_orig As String, caracter_a_sustituir As String)
  2.  
  3. Randomize
  4. For x = 1 To Len(Texto_orig)
  5.    If Mid(Texto_orig, x, 1) = caracter_a_sustituir Then
  6.        Texto_orig = Mid(Texto_orig, 1, x - 1) & "PT" & Int(Rnd * 6) & "PTC" & Right(Texto_orig, Len(Texto_orig) - x)
  7.    End If
  8. Next
  9. Reemplazar_Aleatorio = Texto_orig
  10. End Function

pero....

TXT original:

Citar
hola soy un gordo requete puto

modificado:

Citar
holaPT0PTCsoyPT5PTCunPT5PTCgordo requete puto


No completa :(


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 14:02 pm
Lo único que tienes que hacer es utilizar otra variable temporal en lugar de sustituir la propia Texto_orig, es decir, solo tienes que sustituír en donde esta la igualdad :silbar:
Bueno, y modificar el IF, para que en caso de no coincidir con un caracter sustituible lo acumule igual pero sin cambios

Saludos


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 14:08 pm
 :o :o :huh: :huh: :huh: :huh:

Perdon, pero no entendi nada o.o


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 14:10 pm
Código
  1. Private Function Reemplazar_Aleatorio(Texto_orig As String, caracter_a_sustituir As String)
  2.  
  3. Randomize
  4. For x = 1 To Len(Texto_orig)
  5. If Mid(Texto_orig, x, 1) = caracter_a_sustituir Then
  6. Texto_orig = Mid(Texto_orig, 1, x - 1) & "PT" & Int(Rnd * 6) & "PTC" & Right(Texto_orig, Len(Texto_orig) - x)
  7. 'que cambies el nombre de la variable Texto_orig
  8. Else
  9. 'concatena pero sin cambios
  10. End If
  11. Next
  12. Reemplazar_Aleatorio = Texto_orig
  13. 'obviamente tambien hay que cambiar la variable
  14. End Function


Título: Re: Se repite...
Publicado por: CAR3S? en 30 Diciembre 2010, 14:20 pm
Soy tarado, y mas con sueño, no entiendo nada, voy a romper todooooooooooo  :rolleyes: :rolleyes: :rolleyes: :(

alguien me puede explicar exactamente que renombrar y para que? Me siento cada vez mas estupido :@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.

Sueño, sepan entender,

encima cuando modifico nose ni como se usa la funcion, aiiiiii dios q inutil...


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 14:43 pm
Citar
solo que tengo un concepto distinto y la mayoría de las veces intento que los usuarios aprendan algo por si mismo
Lo intenté, dime que has aprendido hoy y si entiendes la lógica del código :¬¬

Código
  1. Private Function Reemplazar_Aleatorio(Texto_orig As String, caracter_a_sustituir As String, pre As String, post As String)
  2. Dim temp As String
  3. Randomize
  4.  
  5. For x = 1 To Len(Texto_orig)
  6.    If Mid(Texto_orig, x, 1) = caracter_a_sustituir Then
  7.        temp = temp & pre & Int(Rnd * 6) & post
  8.    Else
  9.        temp = temp & Mid(Texto_orig, x, 1)
  10.    End If
  11. Next
  12. Reemplazar_Aleatorio = temp
  13. End Function
Código
  1. Private Sub Form_Load()
  2. texto_nuevo = Reemplazar_Aleatorio("holax, comox andax", "x", "antes", "despues")
  3. Debug.Print texto_nuevo
  4. End Sub

Saludos


Título: Re: Se repite...
Publicado por: 79137913 en 30 Diciembre 2010, 15:12 pm
HOLA!!!

XD lo que pasa es que el code que habia armado era para sustituir caracteres 1 a 1 no 1 a 5.

Igual Novlucker lo soluciono y mejoro XD.

GRACIAS POR LEER!!!


Título: Re: Se repite...
Publicado por: Psyke1 en 30 Diciembre 2010, 16:17 pm
@nuKje
En mi opinión te falta más Google y paciencia para intentar resolver tus errores, no creo que aprendas mucho posteando cada 2x3 cada vez que te salte un error. :-\

@Novlucker
Hay variables sin declarar, no tira error por no poner el Option Explicit... :P
Seguramente esto líe más las cosas :rolleyes:, pero yo lo haría así :

Código
  1. Option Explicit
  2.  
  3. Private Function RndReplace(ByVal sText As String, ByVal sChar As String, ByVal sFirstWord As String, ByVal sEndWord As String) As String
  4. Dim sActualChar                                             As String * 1
  5. Dim lTextLen                                                As Long
  6. Dim Q                                                       As Long
  7.  
  8.    lTextLen = Len(sText)
  9.    If lTextLen > 2 Then
  10.        Call Randomize(Timer)
  11.        For Q = 1 To lTextLen
  12.            sActualChar = Strings.Mid$(sText, Q, 1)
  13.            RndReplace = RndReplace & IIf((sActualChar = sChar), (sFirstWord & CStr(CInt(Rnd * 6)) & sEndWord), sActualChar)
  14.        Next Q
  15.    End If
  16. End Function
  17.  
  18. Private Sub Form_Load()
  19.    ' ¡Vivan las ranas! :D
  20.    Debug.Print RndReplace("holax, comox andax", "x", "ANTES", "DESPUÉS")
  21. End Sub

Resultado:
Citar
holaANTES6DESPUÉS, comoANTES3DESPUÉS andaANTES5DESPUÉS

DoEvents! :P


Título: Re: Se repite...
Publicado por: Novlucker en 30 Diciembre 2010, 16:59 pm
En realidad si hay variables sin declarar, pero no me iba a molestar por eso, son solo la x ,el texto_nuevo y el tipo de retorno de la función :xD, y si, creo que si no ha entendido el primer código ese menos :xD