Visual Basic para Aplicaciones - Ordenar una matriz

Life is soft - evento anual de software empresarial
   
Vista:
Imágen de perfil de Hipromark

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

Ordenar una matriz

Publicado por Antoni Masana (48 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

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