Autor Tema: Como puedo ordenar esto? (Solucionado)  (Leído 4826 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Como puedo ordenar esto? (Solucionado)
« en: Junio 08, 2011, 02:10:19 pm »
Hola yo siempre con las cosas raras!!
Como puedo ordenar esto?
tengo unas matriz de cadenas que en realidad tienen números pero de esta manera:

Mat(0)=12 90 33
Mat(1)=34 56
Mat(2)=90 56 33 45
Mat(3)=9

Y necesataría que se ordene por la que contiene menos cantidad de numeros separados pro espacio lo que deberia quedar asi:

mat(0)=9
mat(1)=34 56
mat(3)=12 90 33
mat(4)=90 56 33 45

Gracias por su ayuda!!

Mike


 
« última modificación: Junio 09, 2011, 06:38:25 pm por MIKE »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Re:Como puedo ordenar esto?
« Respuesta #1 en: Junio 08, 2011, 04:44:38 pm »
Podrias separar con un modulo par tokens no lo escribi yo. pero ya no encontre la pagina del programador

http://www.megaupload.com/?d=W261JZZ0

También puedes usar la función split

con esto sabras cuantos numeros separados (tokens) por un espacio (delimitador) tienes en cada cadena del arrerglo, ya solo faltaria hacer la relacion y hacer intercambios de tus cadenas en el arreglo por ejemplo podrias arreglarla por burbuja, considerando algo asi

a(0)= "34 45 56"     en una funcion valor(a(0))    donde regreses  el numero de tokens.

Para tener algo asi

Mat(0)=12 90 33                   aux(0) = valor (Mat(0))  'valdria 3
Mat(1)=34 56                        aux(1) = valor (Mat(1))  'valdria 2
Mat(2)=90 56 33 45              aux(2) = valor (Mat(2))  'valdria 4
Mat(3)=9                               aux(3) = valor (Mat(0))  'valdria 1

Asi aplicas un sort tipo burbuja o el que quieras sobre aux, y los intercambios en los indices de aux, los manejas en Mat tambien... si te das cuenta en la logica ni siqueira utilizarias otro arreglo auxiliar como aux.

No importa que sean raras tus preguntas... si no que les des continuidad al tema, que por cierto por ahi debes una respuesta.

te pondria el codigo... pero luego no tienes tiempo de revisar  :-[

Saludos
« última modificación: Junio 09, 2011, 04:23:26 pm por czar9 »

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Como puedo ordenar esto?
« Respuesta #2 en: Junio 09, 2011, 04:46:59 pm »
Perdon no me da para resolverlo lo voy a intentar de nuevo mañana!!!

Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Re:Como puedo ordenar esto?
« Respuesta #3 en: Junio 09, 2011, 05:50:44 pm »
Perdon no me da para resolverlo lo voy a intentar de nuevo mañana!!!


Como que no!!!!!!!!!!!!!!!!!   triste muy triste  :'(
Te pongo el código que comprueba que sirve!!  ;D

Para aclarar en el codigo creo que esta linea seria la mas extraña o aparente sin lógica
UBound(Split(Mat(i), " ")) + 1

Explicación
split(Mat(i)," ")
La funcion split regresa un array base zero "cortando" la cadena en subcadenas, cada que encuentra el delimitador
split(Mat(i)," ")
ejemplo
es decir cada que la cadena tiene un " " lo pone en un espacio en el arreglo
Mat(i) tiene por valor la cadena "12 90 33" al ejecutar split("12,90,33"," ") nos regresaría un arreglo
(0) = "12"
(1) = "90"
(2) = "33"
aqui hay que ver que el indice superior es de 2, pero como es base zero tendriamos 3 elementos o lo que es lo mismo, calculamos el indice superior y le sumamos 1 para obtener la cantidad de elementos. por eso uso ubound para calcular el indice superior y le sumo 1 par tener el numero de elementos en ese arreglo.

Es decir sorteamos un arreglo en base a al cantidad de numeros separados por un espacio, para obtener esa cantidad usamos split apra separarlos ubound para contarlos y le sumamos el 1 por el cero...


y aca el código que prueba que la lógica... sirve =)




Código: [Seleccionar]
Private Sub Form_Load()
Dim Mat(3) As String
Mat(0) = "12 90 33"
Mat(1) = "34 56"
Mat(2) = "90 56 33 45"
Mat(3) = "9"

'algoritmo de la burbuja
Dim iMin    As Long
    Dim iMax    As Long
    Dim Vectemp As String                   ' -- variable temporal
    Dim Pos     As Long
    Dim i       As Long
 
    iMin = LBound(Mat)
    iMax = UBound(Mat)
     
    While iMax > iMin
        Pos = iMin
        For i = iMin To iMax - 1
           
            If UBound(Split(Mat(i), " ")) + 1 > UBound(Split(Mat(i + 1), " ")) + 1 Then
            Vectemp = Mat(i + 1)
            Mat(i + 1) = Mat(i)
            Mat(i) = Vectemp
            Pos = i
            End If
        Next i
        iMax = Pos
    Wend
       
    'mostrar el arreglo
    iMin = LBound(Mat)
    iMax = UBound(Mat) 'como al final de burbuja este valor cambia, lo recalculamos
    For i = iMin To iMax
     MsgBox Mat(i)
    Next i
   
End Sub

Juan Luis López

  • Bytes
  • *
  • Mensajes: 30
  • Reputación: +2/-0
  • No nos mires ¡UNETE!
    • Ver Perfil
    • #spanishrevolution
Re:Como puedo ordenar esto?
« Respuesta #4 en: Junio 09, 2011, 06:21:57 pm »
usa el método de la burbuja usando como elemento a comparar len(Matriz(indice))
Juventud SIN futuro. Sin casa, sin curro, sin pensión, ¡Sin miedo!

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Como puedo ordenar esto?
« Respuesta #5 en: Junio 09, 2011, 06:37:53 pm »
GRande Czar9 !!! Eres un genio Si que funciona!!! y de verlo asi parece tan simple...  Pero no se me ocurrio!!  me falta mucho parece  ... jajaj

Muchas Gracias!!


  • No hagas "Citas" extensas e innecesarias, solo cita lo mas importante.

« última modificación: Junio 09, 2011, 08:59:23 pm por xkiz ™ »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

czar9

  • Kilobyte
  • **
  • Mensajes: 64
  • Reputación: +4/-4
    • Ver Perfil
Re:Como puedo ordenar esto?
« Respuesta #6 en: Junio 09, 2011, 06:40:07 pm »
usa el método de la burbuja usando como elemento a comparar len(Matriz(indice))

esto daría la cantidad de caracteres..... no la cantidad de tokens

Mat(0) = "34 56"

len(Mat(i))
lo cual valdria 5 y seria incorrecto!!!

en cambio con
UBound(Split(Mat(i), " ")) + 1
valdria un 2, que es la cantidad correcta de números separados por un espacio....  ::)