Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => 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 (vb) [Seleccionar]

Private Sub Form_Load()
Dim i As Integer
Dim j As Integer
Dim sigue As Boolean
Dim ran As Integer

ReDim Equipo(frmChampion.ListNombre.ListCount)
ReDim Nombre(frmChampion.ListNombre.ListCount)

Cant = frmChampion.ListNombre.ListCount

For i = 0 To UBound(Nombre)

    Do
         Randomize
         ran = Int(Rnd() * Cant + 1)

    Loop While Nombre(ran) <> vbNullString

    Nombre(ran) = frmChampion.ListNombre.List(i)

    For j = 0 To Cant
         If Nombre(j) = vbNullString Then
             sigue = True
         End If

    Next

    If sigue = False Then
        Exit For
    End If

Next

For j = 0 To UBound(Nombre)
    Debug.Print Nombre(j)
Next

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

Usa esta funcion:
Código (vb) [Seleccionar]
Private Function RandomizeArray7913(arr() As Long) As Long()
'cambiar      ACA-v    abajo*        ACA-^    ACA-^ para cambiar el tipo
Dim auxArr() As Long
Dim pos As Long
Dim lb As Long
Dim ub As Long
Dim ct As Long
   Randomize Timer
   ct = lb
   lb = LBound(arr)
   ub = UBound(arr)
   ReDim auxArr(lb To ub)
   pos = Int(Rnd() * (ub - lb + 1 )) + lb
   auxArr(pos) = arr(ct)
   ct = ct + 1
   While ct <= ub
       pos = Int(Rnd() * (ub - lb + 1 )) + lb
       While auxArr(pos) <> 0 'PARA VARIANT NOT ISEMPTY(AUXARR(POS)) PARA STRING AUXARR (POS) <> ""
           pos = Int(Rnd() * (ub - lb + 1 )) + lb
       Wend
       auxArr(pos) = arr(ct)
       ct = ct + 1
   Wend
   RandomizeArray7913 = auxArr
End Function


Asi se usa:
Código (vb) [Seleccionar]
Private Sub Form_Load()
Dim a(9) As Long
Dim b() As Long

For x = 0 To 9
a(x) = x
Next
b = RandomizeArray7913(a)
For x = LBound(b) To UBound(b)
   Debug.Print b(x)
Next
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 (vb) [Seleccionar]


Cant = frmChampion.ListNombre.ListCount //Supongamos que es 8 (0 a 7)

For i = 0 To UBound(Nombre)

    Do
         Randomize
         ran = Int(Rnd() * Cant + 1)
'Tienes una lista con 8 campos (0 a 7), al hacer Rnd*8 el numero maximo será 7
'Pero como le sumas 1, RAN podría valer 8, que sería un valor fuera de rango.

    Loop While Nombre(ran) <> vbNullString
'El ciclo se romperá "por suerte" :D, podrían salir solo 4's, 6's o 2's en cuyos
'campos siempre habría una cadena valida, lo que permitiría la inmortalidad del ciclo.


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 (csharp) [Seleccionar]

string[] hola = new string[6]


El array hola ira desde 0 to 5

Sin embargo en vb6

Código (vb) [Seleccionar]

dim hola(6) as string


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 (vb) [Seleccionar]
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:

Citarmiarray(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
Cita de: ignorantev1.1 en 28 Septiembre 2011, 20:34 PM
Código (vb) [Seleccionar]
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 (vb) [Seleccionar]


max = UBound(Equipo)

For i = 0 To max

    Do
         Randomize Time
         ran = CInt(Rnd() * max)

    Loop While Ordenado(ran) <> ""

    Ordenado(ran) = Equipo
   
Next


xDD Lo dejo por si las moscas..