Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: $Edu$ en 27 Septiembre 2011, 17:55 pm



Título: Problema ordenando array al azar
Publicado por: $Edu$ en 27 Septiembre 2011, 17:55 pm
Es una boludez lo que no puedo hacer, el problema estara en como creo el random, ya que no se si sale el 0 y tambien me confundo con .net lo que pasa porque hacia mucho que no tocaba vb6 y digo esto porque talvez tengo problemas con los bucles con los valores posibles de i

Esto que dejo crea un bucle infinito dentro del do-loop while y la idea es que tome los items del listbox y los meta al azar en el array nombre()

Código
  1. Private Sub Form_Load()
  2. Dim i As Integer
  3. Dim j As Integer
  4. Dim sigue As Boolean
  5. Dim ran As Integer
  6.  
  7. ReDim Equipo(frmChampion.ListNombre.ListCount)
  8. ReDim Nombre(frmChampion.ListNombre.ListCount)
  9.  
  10. Cant = frmChampion.ListNombre.ListCount
  11.  
  12. For i = 0 To UBound(Nombre)
  13.  
  14.    Do
  15.         Randomize
  16.         ran = Int(Rnd() * Cant + 1)
  17.  
  18.    Loop While Nombre(ran) <> vbNullString
  19.  
  20.    Nombre(ran) = frmChampion.ListNombre.List(i)
  21.  
  22.    For j = 0 To Cant
  23.         If Nombre(j) = vbNullString Then
  24.             sigue = True
  25.         End If
  26.  
  27.    Next
  28.  
  29.    If sigue = False Then
  30.        Exit For
  31.    End If
  32.  
  33. Next
  34.  
  35. For j = 0 To UBound(Nombre)
  36.    Debug.Print Nombre(j)
  37. Next
  38.  
  39. End Sub
  40.  


Título: Re: Problema ordenando array al azar
Publicado por: 79137913 en 27 Septiembre 2011, 18:27 pm
HOLA!!!

Usa esta funcion:
Código
  1. Private Function RandomizeArray7913(arr() As Long) As Long()
  2. 'cambiar      ACA-v    abajo*        ACA-^    ACA-^ para cambiar el tipo
  3. Dim auxArr() As Long
  4. Dim pos As Long
  5. Dim lb As Long
  6. Dim ub As Long
  7. Dim ct As Long
  8.    Randomize Timer
  9.    ct = lb
  10.    lb = LBound(arr)
  11.    ub = UBound(arr)
  12.    ReDim auxArr(lb To ub)
  13.    pos = Int(Rnd() * (ub - lb + 1 )) + lb
  14.    auxArr(pos) = arr(ct)
  15.    ct = ct + 1
  16.    While ct <= ub
  17.        pos = Int(Rnd() * (ub - lb + 1 )) + lb
  18.        While auxArr(pos) <> 0 'PARA VARIANT NOT ISEMPTY(AUXARR(POS)) PARA STRING AUXARR (POS) <> ""
  19.            pos = Int(Rnd() * (ub - lb + 1 )) + lb
  20.        Wend
  21.        auxArr(pos) = arr(ct)
  22.        ct = ct + 1
  23.    Wend
  24.    RandomizeArray7913 = auxArr
  25. End Function
  26.  

Asi se usa:
Código
  1. Private Sub Form_Load()
  2. Dim a(9) As Long
  3. Dim b() As Long
  4.  
  5. For x = 0 To 9
  6. a(x) = x
  7. Next
  8. b = RandomizeArray7913(a)
  9. For x = LBound(b) To UBound(b)
  10.    Debug.Print b(x)
  11. Next
  12. End Sub

GRACIAS POR LEER!!!


Título: Re: Problema ordenando array al azar
Publicado por: BlackZeroX en 27 Septiembre 2011, 19:54 pm
http://foro.elhacker.net/programacion_visual_basic/source_cpushsort-t340133.0.html

Dulces Lunas!¡.


Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 28 Septiembre 2011, 01:26 am
Gracias por las molestia pero me sigue creando un bucle infinito y tengo que terminar la aplicacion.
Si pueden mirar mi codigo que esta bien entendible pienso y me dicen que hice mal, les agradezco


Título: Re: Problema ordenando array al azar
Publicado por: ignorantev1.1 en 28 Septiembre 2011, 04:05 am
Código
  1.  
  2. Cant = frmChampion.ListNombre.ListCount //Supongamos que es 8 (0 a 7)
  3.  
  4. For i = 0 To UBound(Nombre)
  5.  
  6.    Do
  7.         Randomize
  8.         ran = Int(Rnd() * Cant + 1)
  9. 'Tienes una lista con 8 campos (0 a 7), al hacer Rnd*8 el numero maximo será 7
  10. 'Pero como le sumas 1, RAN podría valer 8, que sería un valor fuera de rango.
  11.  
  12.    Loop While Nombre(ran) <> vbNullString
  13. 'El ciclo se romperá "por suerte" :D, podrían salir solo 4's, 6's o 2's en cuyos
  14. 'campos siempre habría una cadena valida, lo que permitiría la inmortalidad del ciclo.
  15.  

Saludos!


Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 28 Septiembre 2011, 04:40 am
Como? mi idea con ese bucle es que genere numeros hasta que nombre(esenumero) no contenga nada, asi le pone el valor del item i
O lo estoy haciendo mal? no te entendi bien, dime q puedo cambiar ahi.


Título: Re: Problema ordenando array al azar
Publicado por: BlackZeroX en 28 Septiembre 2011, 04:54 am
numeros aleatorios sin repeticion?...

http://foro.elhacker.net/programacion_visual_basic/src_crndnumbersnr_generar_numeros_aleatorios_sin_repetir_veryfast-t328967.0.html

Dulces Lunas!¡.


Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 28 Septiembre 2011, 19:48 pm
Alguien que me diga la parte del codigo mio que esta mal?


Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 28 Septiembre 2011, 20:07 pm
Ya pude, le cambie lo que dijo Ignorante, de quitarle el + 1 que yo habia puesto que ya ni me acuerdo porque.
Y le puse que los bucles sean hace ubound(nombre) -1

Pero ahora.. la gran pregunta.. porque? Si yo creo un array(6) , el ubound(array) sera igual a 6? no tendria que ser igual a 5? Cometi ese error que tendria que saberlo no se porque me confundo cuando programo en C# y luego paso a vb6, si todos los arrays se inician en 0 y es lo mismo, o no se , si alguien me explica esto re basico, le agradezco.


Ya me explicaron y mi confuncion fue porque en C# al hacer:

Código
  1. string[] hola = new string[6]
  2.  

El array hola ira desde 0 to 5

Sin embargo en vb6

Código
  1. dim hola(6) as string
  2.  

El array hola ira desde 0 to 6 no?


Título: Re: Problema ordenando array al azar
Publicado por: ignorantev1.1 en 28 Septiembre 2011, 20:34 pm
Código
  1. dim hola(6) as string
No, estás reservando 6 campos, 0 al 5.
Creo que en C# es lo mismo quen en VB. Casi todos los arrays inician en 0, a menos que especifiques lo contrario:

Citar
miarray(1 to 6)

Saludos!



Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 28 Septiembre 2011, 21:15 pm
Me saque las dudas y estoy en lo correcto yo :/


Título: Re: Problema ordenando array al azar
Publicado por: Sanlegas en 29 Septiembre 2011, 04:02 am
Código
  1. dim hola(6) as string
No, estás reservando 6 campos, 0 al 5.
Creo que en C# es lo mismo quen en VB. Casi todos los arrays inician en 0, a menos que especifiques lo contrario:

Saludos!



esta reservando 7 espacios ya que el 0 cuenta, si quieres que no haya cero cambialo desde el Option Base


Título: Re: Problema ordenando array al azar
Publicado por: $Edu$ en 30 Septiembre 2011, 04:44 am
No se que me pasaba pero ya volvi a entenderle la mano y ya mejore muchisimo mi codigo asqueroso xD

Código
  1.  
  2. max = UBound(Equipo)
  3.  
  4. For i = 0 To max
  5.  
  6.    Do
  7.         Randomize Time
  8.         ran = CInt(Rnd() * max)
  9.  
  10.    Loop While Ordenado(ran) <> ""
  11.  
  12.    Ordenado(ran) = Equipo
  13.  
  14. Next
  15.  

xDD Lo dejo por si las moscas..