Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: katanaia en 25 Noviembre 2008, 18:11 pm



Título: Reordernar array de strings aleatoriamente (Ayuda)
Publicado por: katanaia en 25 Noviembre 2008, 18:11 pm
Necesito una funcion para reordenar o mezclar al azar un array de strings.

O sea, que de un array con los elementos ordenados: "paco", "42", "35", "gato"
luego de pasarle la funcion pueda quedar algo como: "35", "paco", "gato", "42"

Alguien me puede ayudar?


Título: Re: Reordernar array de strings aleatoriamente (Ayuda)
Publicado por: Jedaias en 25 Noviembre 2008, 19:05 pm
Se me ocurre algo como esto:

Variables Globales
Código
  1. Dim cadena1(3) as string
  2. Dim cadena2(3) as string
  3.  

Declaracion de la cadena1
Código
  1. cadena1(0) = "paco"
  2. cadena1(1) = "42"
  3. cadena1(2) = "35"
  4. cadena1(3) = "gato"
  5.  

Procedimiento que reordena aleatoriamente la cadena1 y la guarda en cadena2
Código
  1. Dim Bandera As Boolean
  2. Dim vNum As Integer
  3.  
  4. Randomize
  5.  
  6. cadena2(0) = ""
  7. cadena2(1) = ""
  8. cadena2(2) = ""
  9. cadena2(3) = ""
  10.  
  11. For x = 0 To 3
  12.    Bandera = True
  13.    Do While Bandera
  14.        vNum = Int(Rnd * 4)
  15.        If cadena2(vNum) = "" Then
  16.            cadena2(vNum) = cadena1(x)
  17.            Bandera = False
  18.        End If
  19.    Loop
  20. Next
  21.  


Título: Re: Reordernar array de strings aleatoriamente (Ayuda)
Publicado por: cobein en 25 Noviembre 2008, 19:27 pm
Código:
Option Explicit

Private Sub Form_Load()
    Dim i As Long
    Dim svData() As String
   
    ReDim svData(25)
    For i = 0 To UBound(svData)
        svData(i) = i
    Next
   
    MixUp svData
   
    For i = 0 To UBound(svData)
        Debug.Print svData(i)
    Next
End Sub

Private Sub MixUp(svData() As String)
    Dim sTemp As String
    Dim lIndex As Long
    Dim lIndex1 As Long
    Dim i As Long
   
    Randomize Timer
    For i = 0 To UBound(svData) * 5
        lIndex = Rnd * UBound(svData)
        lIndex1 = Rnd * UBound(svData)
        sTemp = svData(lIndex): svData(lIndex) = svData(lIndex1): svData(lIndex1) = sTemp
    Next
End Sub