Visual Basic para Aplicaciones - Ordenar una matriz

Life is soft - evento anual de software empresarial
 
Vista:
Imágen de perfil de Hipromark
Val: 2
Ha disminuido su posición en 26 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Ordenar una matriz

Publicado por Hipromark (2 intervenciones) el 20/06/2016 05:11:13
Saludos compañeros. Estoy tratando de ordenar una matriz de mayor a menor, logro crear la matriz y en una parte del código trato de oredenarla de mayor a menor utilizando como base un código que funciona para arrays de una dimensión, pero en la matriz no logro hacer que me funcione ni de mayor a menor ni al contrario tampoco. Agradezco cualquier ayuda, Adjunto el código:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Sub matriz_ordenada()
 
Dim numElementos As Integer
Dim valor, valor2 As Integer
Dim i, j, k, h As Integer
Dim Mat(2, 3) As Integer
Dim container As Integer
'container es un auxiliar para guardar algunos resultados
 
For i = 1 To 2
 
  valor = InputBox("ingrese un número entero")
  j = 1
  Mat(i, j) = valor
 
  For j = (j + 1) To 3
    valor2 = InputBox("ingrese un número entero")
    Mat(i, j) = valor2
  Next j
 
Next i
 
'Aquí viene el código que debería ordenar la matriz, pero no me funciona
 
For i = 1 To 2
  For k = (i + 1) To 2
     j = 1
     If Mat(i, j) > Mat(k, j) Then
        container = Mat(i, j)
        Mat(i, j) = Mat(k, j)
        Mat(k, j) = container
     End If
 
     For j = (j + 1) To 3
       h = i + 1
       If Mat(i, j) > Mat(h, j) Then
        container = Mat(i, j)
        Mat(i, j) = Mat(h, j)
        Mat(h, j) = container
       End If
     Next j
 
   Next k
Next i
 
'Aquí imprimo la matriz pero no me la trae en el orden que quiero
 
For i = 1 To 2
 j = 1
 Debug.Print Mat(i, j) & ", "
 For j = (j + 1) To 3
    Debug.Print Mat(i, j) & ", "
 Next j
Next i
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Ordenar una matriz

Publicado por Antoni Masana (498 intervenciones) el 24/06/2016 13:30:04
Haber si entiendo que quieres hacer.

Tienes una matriz con dos vectore que voy a llamar X,Y, esto seria Mat(X,Y) y voy a representar la tabla de forma gráfica:

1
2
3
4
5
6
7
8
9
Y
  +-----+-----+
1 | 361 | 141 |
  +-----+-----+
2 | 702 | 422 |
  +-----+-----+
3 | 673 | 923 |
  +-----+-----+  X
     1     2

Llegados a este punto ¿Como la deseas ordenar? o dicho de otra forma ¿Cual debería ser el resultado?

Una forma simple de solucionarlo seria pasar la matriz a otra tabla de un soló indice es decir X * Y en es mismo orden que deseas el resultado:
Dicho deseas que los numeros queden en este orden en Mat:

1
2
3
4
5
6
Tab(1) = Mat(1,1)
Tab(2) = Mat(1,2)
Tab(3) = Mat(1,3)
Tab(4) = Mat(2,1)
Tab(5) = Mat(2,2)
Tab(6) = Mat(2,3)

Ordenas Tab y haces el paso Inverso:

1
2
3
4
5
6
Mat(1,1) = Tab(1)
Mat(1,2) = Tab(2)
Mat(1,3) = Tab(3)
Mat(2,1) = Tab(4)
Mat(2,2) = Tab(5)
Mat(2,3) = Tab(6)

Que lo deseas ordenado de otra forma, por ejemplo

1
2
3
4
5
6
Tab(1) = Mat(1,1)
Tab(2) = Mat(2,1)
Tab(3) = Mat(1,2)
Tab(4) = Mat(2,2)
Tab(5) = Mat(1,2)
Tab(6) = Mat(2,3)

Pués lo mismo que antes, también lo puedes hacer con un par de bucles FOR en cada caso.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 2
Ha disminuido su posición en 26 puestos en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Ordenar una matriz

Publicado por Javier (2 intervenciones) el 09/08/2016 23:50:22
Gracias amigo por el esfuerzo en explicar, veo que eres bueno en matrtrices, yo no soy tan bueno en matemáticas ni en lógica por lo que no entendí ni papa. Si fueras tan amable de ponerlo como código en VBA o como pseudocódigo lo captaría mejor. De cualquier modo gracias por intentar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ordenar una matriz

Publicado por Javier (1 intervención) el 30/05/2022 05:41:28
Yo hice un array que ordena por fechas en la primera columna, aunque se puede adaptar para otros valores. Lo que hace simplemente es comparar dos arrays sumando cada vez que encuentra un valor mayor, de esa manera cada valor a comparar tendrá un valor diferente que se asignara a la posición dentro de la matriz. El único problema es que falla cuando hay valores repetidos. Faltaría agregar alguna condición en ese caso. Para ordenar de menor a mayor solo es cuestión de cambiar el signo en el código o añadirlo a una variable en la función, lo mismo para ordenar por columna.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Function Ordenar(ByVal Arr As Variant) As Variant
 
Dim ArrOrdenado As Variant
ReDim ArrOrdenado(0 To UBound(Arr), 2)
Dim Posicion As Integer
Dim Fecha_1 As Date
Dim Fecha_2 As Date
 
For i = LBound(Arr) To UBound(Arr)
Fecha_1 = Arr(i, 1)
    For n = LBound(Arr) To UBound(Arr)
    Fecha_2 = Arr(n, 1)
 
    If Fecha_1 > Fecha_2 Then Posicion = Posicion + 1
 
    Next
  ArrOrdenado(Posicion, 1) = Arr(i, 1)
  ArrOrdenado(Posicion, 2) = Arr(i, 2)
  Posicion = 0
Next
 
Ordenar = ArrOrdenado
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar