Está en la página 1de 12

Animacion para un formulario con una imagen 1. Option Explicit 2. 3. 4. 'Variables para la animacin de gravedad 5.

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

Mtodo de ordenamiento ejemplo 1

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

Colocar un List1 Un List2 Dos botones (Command1 y Command2 )

Cdigo en un Fom Texto planoImprimir 1. Option Explicit 2.

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:

Sub Ordenar_Matriz(El_Vector() As Variant, _ Limite_Inferior As Long, _ Limite_Superior As Long)

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

Ejemplo del algortmo llamado insercin para ordenar un array de nmeros


Este mtodo ordena el vector desplazando los elementos mayores hacia la parte derecha y los inferiores hacia la izquierda La sub que ordena el array, se le debe enviar como parmetro la matriz a ordenar y en el segundo parmetro el modo de ordenacin , es decir en forma Ascendente o Descendente. Nota: para optimizar la velocidad de ordenacin, sobre todo si son muchos elementos, cambiar la declaracin del vector ( que est como Variant ), al tipo de dato a usar. Y tambin el valor de la variable t as Variant( El elemento temporal ) que se encuentra dentro del procedimiento de ordenacin Otra cuestin es que este mtodo es mucho mas eficiente cuando el vector ha sido inicializado con los datos ordenados en forma Ascendente, no asi cuando se ha inicializado en forma aleatoria o en forma Descendente.

Colocar:
y y

un control ListBox y dos CommandButton, el Command1 llena el vector de nmeros aleatorios, el Command2 los ordena

Cdigo fuente en el formulario Texto planoImprimir

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

También podría gustarte