• Lunes 29 de Abril de 2024, 02:36

Autor Tema:  Ordenar una matriz..  (Leído 9616 veces)

Jesmi89

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Ordenar una matriz..
« en: Jueves 30 de Octubre de 2008, 01:43 »
0
hola como estan,
Miren quisiera pedirles una yudita con esto... Lo que pasa es que debo hacer un codigo que ordene una matriz, pero no lo logro porque se que para poder ordenarla primero hay que pasarla a vector, miren lo que tengo es esto, ah pero la verdad no se si asi sea, ya que asi fue como nos dijo el profesor que habia que hacerlo

Public Class Form4
Dim z As Integer          
Dim n As Integer            

   'la matriz y el vector estan declarados en un modulo asi:
Public vec(15)
                                                                                                                        Public matriz(5, 3) As Integer


        z = 1
        For i = 0 To 5
            For j = 1 To 3
                vec(z) = matriz(i, j)        
                 z = z + 1                                                                                  
         Next  
Next                                                                      
 
'aqui capturo datos en otro formulario:  
For i = 0 To 4

For j = 0 To 2
matriz(i, j) = InputBox("digite datos")
                                                                                                                       
 Next
 Next                                                                      
                                                                                                                                 
                                                                                                                     
' aqui debe ir algun metodo de ordenamiento, pero la verdad no se como se podria hacer, luego de ello sigue lo otro para ahora si mostrar la matriz ordenada'

        n = 1
        For i = 1 To 3
            For j = 1 To 3
                matriz(i, j) = vec(z)
                n = n + 1
            Next
        Next


Gracias y espero que me entiendan que es lo que pretendo hacer, y ojala me puedan brindar una ayudita. O si porfa existe una forma mejor para hacerlo.... Porque en si lo que necesito es organizar una matriz

Gracias de nuevo....

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Ordenar una matriz..
« Respuesta #1 en: Jueves 30 de Octubre de 2008, 18:11 »
0
Hola...

De entrada decirte que se puede ordenar perfectamente una matriz de 2 o más dimensiones directamente sin trasvasarla a una matriz unidimensional, pero el algoritmo resultante es un poco más complejo, y ciertamente para un estudiante que se inicia sea más complejo aún de lo necesario.

Dicho lo cual te aclaro: ordenar es comparar por tamaños y colocarlos de acuerdo a esa comparación... por tanto , si ordenas de mayor a menor deberías tener una variable llamada max (o la que te dé la gana, pero que refleje la idea del mayor) y habrá de contener o bien el valor del mayor o bien el índice del valor de mayor. No obstante para empezar... el algoritmo más sencillo de entender es el de burbuja y a ese caso la variable necesaria no tiene la necesidad de llamarse max ni min, sino más bien temp, ya que contendrá un valor arbitrario de modo temporal.

El método de burbuja es casi el más sencillo de programar, de hecho es tan sencillo que se puede programar de memoria, sin pensar en menos de un minuto (menos aún, para los que teclean muy rápido).

El método de burbuja son 2 bucles anidados, el externo hha de recorrer desde 0 hasta el final de la matriz -1, el bucle interno se inicia en el valor actual  del externo +1, hasta el final de la matriz. Fíjate que 'A < B' es igual que 'B  > A' , lo digo porque a veces puede inducir a engaño pensar que si busco el mayor plantee que un elemento es menor que...estuviera mal, cuando es totalmente correcto.

El cuerpo del bucle interno lo que hace es preguntarle el valor de la matriz cuyo índice señala el primer bucle es menorque el valor de la matriz en el índice que señala el bucle interno ????, si la respuesta es si se intercambian los valores, para ello usamos esa variable temp...
Código: Visual Basic
  1. temp= matriz(bE)  ' be bucleexterno, bi bucle interno... refieren el contador de cada bucle, típicamente llamados  j,k,i
  2. matriz(bE)=matriz(bI)
  3. matriz(BI)=temp
  4.  
Fíjate de no liarte si quieres ordenar de mayor a menor o de menor a mayor, ya que con un pequeño cambio (de diferentes maneras) en esa parte del código el desarrolo final podría ser el inverso... o incluso algo desastroso. Como referencia, con los datos aportados, al final del primer bucle interno, matriz(0) contiene el mayor de todo el array....
El algoritmo de burbuja es casi el más lento, pero para unos pocos cientos de elementos no se nota...

Ya lo tienes mascado..
«Ma non troppo»
----> ModoVacaciones = False<----

Jesmi89

  • Nuevo Miembro
  • *
  • Mensajes: 23
    • Ver Perfil
Re: Ordenar una matriz..
« Respuesta #2 en: Jueves 30 de Octubre de 2008, 23:33 »
0
Nebire, muchas gracias por tu explicacion...

Si tienes toda la razon es super sencillo utilizando el metodo burbuja, ya logre hacerlo y me funciono de maravilla

Bye :hola:

vyrcyrus

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Ordenar una matriz..
« Respuesta #3 en: Sábado 1 de Noviembre de 2008, 14:12 »
0
Evidentemente que supongo que debe ser un ejercicio para practicar algorismos de ordenacion si te lo manda tu profesor, auqnue de todas formas te explico la manera más rapida de hacerlo o m,ejor dicho que el ordenador lo haga por nosotros sin atender a ningun algorismo de ordenacion ya sea de burbuja , de promedio o hash( supongo que el sistema emplea este para el ejemplo que describo)

dim M(3,3) as integer = {3,56,7,2,1,64,67,2,1}
dim num as integer
arrray.sort(M)

for each num in M
   msgbox num
next


NO lo he probado., pero si funciona para una dimensión funciona para n dimensiones (supongo :))