Ayuda con Visual Net 2008

clionel

Baneado :(
#1
Hola amigos del corral, recién estoy empezando a programar en Visualnet 2008 y pues tengo un problemita con un poco de código, tengo datos en 1 listbox (lstcapturados), los cuales paso a un Arraylist (listaa) y necesito ordenarlos(método burbuja) y regresarlos ya ordenados a otro listbox (lstordenados)
Aquí el código espero me puedan ayudar, de antemano Gracias

Private Sub cmdordena_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdordena.Click
grpordenados.Visible = True
lstordenados.Visible = True
'AQUÍ QUIERO ORDENAR EL CONTENIDO DE LA LISTA1 A LISTA2, ESTOY BUSCANDO ALGUN METODO
'QUE ME FUNCIONE CORRECTAMENTE YA SEA BURBUJA, QUICKSORT, ETC


'Aquí Agrego los datos del listbox1 (lstcapturados) al Arraylist (listaa)
Dim q As Integer
With lstcapturados
listaa.Clear()
listaa.Capacity = lstcapturados.Items.Count
For q = 0 To .Items.Count - 1
listaa.Add(.GetItemText(.Items(q)))

Next
listaa.TrimToSize()
End With

'MÉTODO DE LA BURBUJA,
'No se si la propiedad a usar sea Item, ya que no me sale el ordenamiento
'Se acepta ayuda y/o correcciones para entender el Funcionamiento
Dim a, b, aux, alto As Integer
alto = listaa.Count
a = 0
b = 0
For a = 0 To alto Step +1
For b = 0 To alto Step +1
If listaa.Item(b) > listaa.Item(b + 1) Then
aux = listaa.Item(b)
listaa.Item(b) = listaa.Item(b + 1)
listaa.Item(b + 1) = aux

End If
Next
Next

'Aquí paso el contenido del Arraylist (listaa) al Listbox2 (lstordenado) >>falta ordenar<<
For x As Integer = 0 To listaa.Count - 1
lstordenados.Items.Add(listaa.Item(x))

Next

End Sub
 

XBunbury

Bovino maduro
#3
For a = 0 To alto-2 Step +1
For b = a+1 To alto-1 Step +1
If listaa.Item(a) > listaa.Item(b) Then
aux = listaa.Item(a)
listaa.Item(a) = listaa.Item(b)
listaa.Item(b) = aux
End If
Next
Next

Deberias aprender a programar... si estas en la carrera de sistemas
 

Akonerz

Bovino adicto
#4
For a = 0 To alto-2 Step +1
For b = a+1 To alto-1 Step +1
If listaa.Item(a) > listaa.Item(b) Then
aux = listaa.Item(a)
listaa.Item(a) = listaa.Item(b)
listaa.Item(b) = aux
End If
Next
Next

Deberias aprender a programar... si estas en la carrera de sistemas
el bakuno ya te dio la respuesta pero yo tengo una gran duda que lenguaje es el VISUALNET2008
 

XBunbury

Bovino maduro
#5
muchas se refieren a "visual .net" 2003, 2005, 2008 o 2010 cuando hablan de VISUAL BASIC .Net, la plataforma es Visual Studio .Net, los lenguajes: Visual Basic, C#, etc
 

clionel

Baneado :(
#6
For a = 0 To alto-2 Step +1
For b = a+1 To alto-1 Step +1
If listaa.Item(a) > listaa.Item(b) Then
aux = listaa.Item(a)
listaa.Item(a) = listaa.Item(b)
listaa.Item(b) = aux
End If
Next
Next

Deberias aprender a programar... si estas en la carrera de sistemas
Muchas gracias amigo Xbunbury, de verdad me sirvió tu código y te comento estoy estudiando una Licenciatura en Sistemas, sólo que es en línea, es decir nunca voy a la escuela, y al pedir ayuda en éste valioso foro pues es porque quiero aprender; espero comprendas mi situación, te agradezco tu ayuda, Acepto cualquier crítica también, así como sus ayudas, de nuevo Gracias.
Ahora sólo me falta comprender la lógica que utilizaste...
 

clionel

Baneado :(
#8
Amigos de nuevo solicito su ayuda, ya que con el método que aportó el compañero XBunbury, al parecer hay un detalle que provoca que los números digamos 1, 2, 12, 10 lo ordena 1,10,12,2, cuando lo que necesito es que ordene de Menor a Mayor o Viceversa es decir 1,2,10,12, Cualquier ayuda es Bienvenida
 

XBunbury

Bovino maduro
#11
Nunca mencionaste que eran numeros los que querias ordenar :D, para ordenar con numeros debes convertir a valor numerico con Convert.toint32(objeto) la propiedad text del item.

listaa.Add(CONVERT.TOINT32(.GetItemText(.Items(q))))

y con eso solucionas tu problema, como está actualmente, lo ordena como lo que es... TEXTO ya que usaste el GETITEMTEXT para agregar el valor en la lista.

Saludos
 
#12
Nunca mencionaste que eran numeros los que querias ordenar :D, para ordenar con numeros debes convertir a valor numerico con Convert.toint32(objeto) la propiedad text del item.

listaa.Add(CONVERT.TOINT32(.GetItemText(.Items(q))))

y con eso solucionas tu problema, como está actualmente, lo ordena como lo que es... TEXTO ya que usaste el GETITEMTEXT para agregar el valor en la lista.

Saludos
Tienes razón, nunca mencione que lo que quería ordenar era números, no texto, de todas formas veo que tengo que leer mucho y agradecerte de nuevo toda tu valiosa ayuda.
Te comentó modifique lo que mencionas y funciona a la perfección, sólo que no entiendo porque restas -2, en el primer ciclo y en el segundo -1, En C, yo lo hacía restando -1 nada más.
 

XBunbury

Bovino maduro
#13
Lista original {1,2,3,4,5,6,7,8,9,10}
alto=10, Posiciones del 0 al 9

For a = 0 To alto-2 Step +1
For b = a+1 To alto-1 Step +1
If listaa.Item(a) > listaa.Item(b) Then
aux = listaa.Item(a)
listaa.Item(a) = listaa.Item(b)
listaa.Item(b) = aux
End If
Next
Next


En el Primer ciclo vamos a recorrer las posiciones del 0 al 8 (alto-2 = 10-2 = 8) {1,2,3,4,5,6,7,8,9}
y en el segundo hasta la posicion 9 (alto-1 = 10-1 = 9)

Asi, en la primera vuelta el segundo ciclo va a ir de la posicion 1 a la 9 (a+1 = 0+1 = 1):(alto-1 = 10-1 = 9)
{2,3,4,5,6,7,8,9,10}

Clear??
 
#14
Lista original {1,2,3,4,5,6,7,8,9,10}
alto=10, Posiciones del 0 al 9

For a = 0 To alto-2 Step +1
For b = a+1 To alto-1 Step +1
If listaa.Item(a) > listaa.Item(b) Then
aux = listaa.Item(a)
listaa.Item(a) = listaa.Item(b)
listaa.Item(b) = aux
End If
Next
Next


En el Primer ciclo vamos a recorrer las posiciones del 0 al 8 (alto-2 = 10-2 = 8) {1,2,3,4,5,6,7,8,9}
y en el segundo hasta la posicion 9 (alto-1 = 10-1 = 9)

Asi, en la primera vuelta el segundo ciclo va a ir de la posicion 1 a la 9 (a+1 = 0+1 = 1):(alto-1 = 10-1 = 9)
{2,3,4,5,6,7,8,9,10}

Clear??
Excelente, más claro ni el agua, Gracias, con eso creo no se me olvidará el recorrido de arreglos y el ordenamiento con burbuja
 
Arriba