Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Dim Fuerza As Double 6. Dim Velocidad As Double 7. 8. Private Sub Form_Load() 9. 10. 'Posicionamos el picture o el control image en el form 11. Image1.Top = 10 12. Image1.Left = 10 13. 14. ' maximiza el formulario 15. Me.WindowState = 2 16. 17. 'Establecemos un valor al Timer y lo activamos 18. Timer1.Enabled = True 19. Timer1.Interval = 10 20. 21. 'Establecemos valores a las variables _ 22. para el efecto de rebote 23. Fuerza = 1.7 24. Velocidad = 0 25. End Sub 26. 27. Private Sub Timer1_Timer() 28. 29. 30. If Image1.Top > 4000 Then 31. ' Esta lnea se ejecuta cuando llega al limite 32. Image1.Top = 4000 33. Velocidad = Velocidad * -0.6 34. End If 35. 36. Velocidad = Velocidad + Fuerza 37. 38. ' mueve le top en el control image 39. Image1.Top = Image1.Top + Velocidad 40. 41. End Sub
Ejemplo 1
Este ejemplo ordena un array o vector usando el mtodo de ordenacin llamado Burbuja o BubbleSort. Nota importante. Este algottmo no es el mas indicado para realizar ordenacin de datos, ya que en comparacin a otros mtodos es lento. Lo que si es un mtodo fcil de entender. ( Al final de la pgina hay enlaces para utilizar otros mtodos). Tambin puedes mirar esta pgina donde hay una tabla que demuestra algunos conceptos a la hora de poder elegir entre los mtodos de ordenacin mas convenientes segn la tarea que debamos realizar: Ver pgina web En el cdigo, se utiliza un control Listbox para cargar algunos valores no numricos y a la vez se asignan estos a un vector. Luego al llamar a la rutina Ordenar, se ordenar en forma alfabtica y ascendente. Por ltimo se cargan los datos ordenados en un List2.
Ejemplo
y y y
3. ' -- Vector para los datos 4. Dim Vector() As Variant 5. 6. ' -------------------------------------------------------------------------------7. ' \\ -- Inicio 8. ' -------------------------------------------------------------------------------9. Private Sub Form_Load() 10. Command1.Caption = " Ordenar Vector " 11. Command2.Caption = " Cargar Vector " 12. Command1.Enabled = False 13. End Sub 14. 15. ' -------------------------------------------------------------------------------16. ' \\ -- Botn para Ordenar el array y cargar los valores en el List2 17. ' -------------------------------------------------------------------------------18. Private Sub Command1_Click() 19. Dim i As Integer 20. 21. Call Ordenar 22. List2.Clear 23. 24. For i = 0 To UBound(Vector) 25. List2.AddItem Vector(i) 26. Next i 27. Command1.Enabled = False 28. End Sub 29. 30. ' -------------------------------------------------------------------------------31. ' \\ -- Cargar valores en el List1 32. ' -------------------------------------------------------------------------------33. Private Sub Command2_Click() 34. Command2.Enabled = False 35. Command1.Enabled = True 36. 37. Call Cargar_Array 38. End Sub 39. ' -------------------------------------------------------------------------------40. ' \\ -- BubbleSort - Sub para ordenar el vector 41. ' -------------------------------------------------------------------------------42. Private Sub Ordenar() 43. 44. Dim iMin As Long 45. Dim iMax As Long 46. Dim Vectemp As String ' -- variable temporal 47. Dim Pos As Long 48. Dim i As Long 49.
50. iMin = LBound(Vector) 51. iMax = UBound(Vector) 52. 53. While iMax > iMin 54. Pos = iMin 55. For i = iMin To iMax - 1 56. If Vector(i) > Vector(i + 1) Then 57. Vectemp = Vector(i + 1) 58. Vector(i + 1) = Vector(i) 59. Vector(i) = Vectemp 60. Pos = i 61. End If 62. Next i 63. iMax = Pos 64. Wend 65. End Sub 66. 67. ' --------------------------------------------------------------------------------68. ' \\ -- Sub cargar valores de ejemplo en el array y en el control de lista 69. ' --------------------------------------------------------------------------------70. Private Sub Cargar_Array() 71. Dim i As Integer 72. 73. ' -- Listbox 74. With List1 75. .AddItem "A" 76. .AddItem "H" 77. .AddItem "B" 78. .AddItem "G" 79. .AddItem "C" 80. .AddItem "F" 81. .AddItem "D" 82. End With 83. 84. ' -- Array 85. ReDim Vector(List1.ListCount - 1) 86. For i = 0 To List1.ListCount - 1 87. Vector(i) = List1.List(i) 88. Next i 89. End Sub
Mtodo de ordenamiento ejemplo 2
Ejemplo que llena un vector con valores numricos aleatorios, y luego los ordena visualizandolos en un ListBox con el mtodo QuickSort
Este mtodo, por las pruebas que he hecho comparndolo con el mtodo burbuja (bubblesort ) y otros, para ordenar un vector o array que contiene los datos desordenados, es el mas rpido.
El ejemplo tiene una funcin llamada Ordenar_Matriz con los siguientes parmetros:
El primer parmetro de la rutina se debe enviar el vector a ordenar. El segundo es el lmite inferior: Lbound(El_Vector) El tercero es el lmite Superior: Ubound(El_Vector)
Colocar dos Commandbutton. El Command1 crea valores aleatorios y los carga en el array y en un Listbox. El Command2 ordena la matriz y luego carga los datos ordenados en el control.
Nota: el vector est declarado como Variant para que se pueda enviar cualquier dato numrico. Por eso para utilizarlo con algn dato especifico y optimizar, por ejemplo datos de tipo Long, single etc.., declararlo como " tal " en el argumento de la funcin.
Cdigo fuente en el formulario: Option Explicit 'Vector que se va a desordenar y ordenar Dim Vector() As Variant Sub Ordenar_Matriz(El_Vector() As Variant, _ Limite_Inferior As Long, _ Limite_Superior As Long) Dim i As Long, j As Long, x As Variant, y As Variant i = Limite_Inferior j = Limite_Superior x = El_Vector((Limite_Inferior + Limite_Superior) / 2)
While i <= j While (El_Vector(i) < x) And (i < Limite_Superior) i=i+1 Wend While (x < El_Vector(j)) And (j > Limite_Inferior) j=j-1 Wend If i <= j Then y = El_Vector(i) El_Vector(i) = El_Vector(j) El_Vector(j) = y i=i+1 j=j-1 End If Wend If Limite_Inferior < j Then Ordenar_Matriz El_Vector(), Limite_Inferior, j If i < Limite_Superior Then Ordenar_Matriz El_Vector(), i, Limite_Superior End Sub 'carga valores aleatorios en el vector Private Sub Command1_Click() Dim i As Integer Randomize List1.Clear
ReDim Vector(100) For i = 0 To 100 List1.AddItem Round(Rnd * 5000) ' Llena el array con los nmeros Vector(i) = Round(Rnd * 5000) Next Command1.Enabled = False Command2.Enabled = True End Sub 'Ordena la matriz y luego de ordenada los carga en el ListBox Private Sub Command2_Click() Dim i As Integer List1.Clear 'Pasar el vector, y los lmites inferior y superior del mismo Call Ordenar_Matriz(Vector, LBound(Vector), UBound(Vector)) 'Agrega el vector ordenado al ListBox For i = LBound(Vector) To UBound(Vector) List1.AddItem Vector(i) Next Command1.Enabled = True Command2.Enabled = False End Sub Private Sub Form_Load()
Command1.Caption = " Cargar Listbox con aleatorios " Command2.Caption = " Ordenar Vector y cargarlo en ListBox " Command2.Enabled = False End Sub
Mtodo de ordenamiento 3
Colocar:
y y
un control ListBox y dos CommandButton, el Command1 llena el vector de nmeros aleatorios, el Command2 los ordena
1. Option Explicit 2. 3. Enum E_ORDEN 4. Ascendente = 1 5. Descendente = 0 6. End Enum 7. 8. Dim un_Vector(1 To 1000) As Variant 9. 10. Sub Insercion(El_Vector() As Variant, ORDEN As E_ORDEN) 11. 12. Dim i As Long 13. Dim t As Variant 14. Dim Actual As Long 15. Dim Min As Long 16. Dim Max As Long 17. 18. Min = LBound(El_Vector) 19. Max = UBound(El_Vector) 20. 21. Actual = Min + 1 22. While Actual <= Max 23. i = Actual 24. Do 25. If i > Min Then 26. If ORDEN = Ascendente Then 27. If El_Vector(i) < El_Vector(i - 1) Then 28. t = El_Vector(i) 29. El_Vector(i) = El_Vector(i - 1) 30. El_Vector(i - 1) = t 31. i=i-1 32. Else 33. Exit Do 34. End If 35. Else 36. If El_Vector(i) >= El_Vector(i - 1) Then 37. t = El_Vector(i) 38. El_Vector(i) = El_Vector(i - 1) 39. El_Vector(i - 1) = t 40. i=i-1 41. Else 42. Exit Do 43. End If 44. End If 45. Else 46. Exit Do 47. End If
48. 49. Loop 50. Actual = Actual + 1 51. Wend 52. 53. End Sub 54. 55. Private Sub Command1_Click() 56. Dim i As Long 57. 58. Randomize 59. 'Algunos valores aleatorios para el vector 60. For i = LBound(un_Vector) To UBound(un_Vector) 61. un_Vector(i) = Round(Rnd * 10000) 62. Next 63. 64. Call Cargar_ListBox(un_Vector) 65. 66. Command1.Enabled = Not Command1.Enabled 67. Command2.Enabled = Not Command2.Enabled 68. 69. End Sub 70. 71. Private Sub Command2_Click() 72. 'Le pasa el vector para ordenarlo 73. Call Insercion(un_Vector, Ascendente) 74. 75. ' carga los valores ordenados en el listbox 76. Call Cargar_ListBox(un_Vector) 77. 78. Command1.Enabled = Not Command1.Enabled 79. Command2.Enabled = Not Command2.Enabled 80. 81. End Sub 82. 83. Private Sub Cargar_ListBox(un_Vector) 84. 85. Dim i As Long 86. List1.Clear 87. For i = LBound(un_Vector) To UBound(un_Vector) 88. 89. List1.AddItem un_Vector(i) 90. 91. Next 92. 93. End Sub 94.
95. Private Sub Form_Load() 96. Command1.Caption = " Cargar aleatorios " 97. Command2.Caption = " Ordenar vector " 98. Command2.Enabled = False 99. End Sub 100. 101. Private Sub Form_Resize() 102. Command1.Width = 2500 103. Command2.Width = 2500 104. 105. 106. List1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight - Command1.Height 107. 108. Command2.Move Me.ScaleWidth (Command2.Width + 50), List1.Top + List1.Height + 50 109. Command1.Move Command2.Left (Command2.Width + 50), List1.Top + List1.Height + 50 110. 111. End Sub