Ordenación de tablas

Iniciado por muymuyperdido, 29 Diciembre 2012, 10:32 AM

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

muymuyperdido

Tengo una tabla asi
1 2 3 4
4 3 1 3
2 1 4 2
3 4 2 1
Y otra que es
0
1
0
1
Donde cada elemento de la 1 fila de corresponde al 0, de la segunda al 1, y asi (cada columna de la 1 tabla son experimentos diferentes)
Tengo que ordenar cada columna de menor a mayor y a la vez crear otra tabla de 4x4 con las etiquetas (0 y 1) ordenadas en cada experimento.
Se quedaria
1 1 1 1      0011
2 2 2 2      0010
3 3 3 3      1101
4 4 4 4      1100
¿Serian tres for anidados?

durasno

Hola! para el ordenamiento busca: "algoritmo de ordenamientos" vas a encontrar bastantes, el mas facil es el de la "burbuja"


La segunda tabla nose que es, ni que combinaciones hace. Saludos
Ahorrate una pregunta, lee el man

muymuyperdido

¿El método de la burbuja se puede utilizar para una tabla y aparte otra tabla, que a la vez cree otra tabla?
1 tabla: etiquetas
2 tabla: datos (cada columna ha de ser ordenada a la vez que la de etiquetas y las nuevas etiquetas almacenadas en;)
3 tabla: etiquetas de cada columna de 'datos'
Gracias :)
Feliz año! :silbar:

leosansan

Cita de: muymuyperdido en 29 Diciembre 2012, 10:32 AM
Tengo una tabla asi
1 2 3 4
4 3 1 3
2 1 4 2
3 4 2 1
Y otra que es
0
1
0
1
Donde cada elemento de la 1 fila de corresponde al 0, de la segunda al 1, y asi (cada columna de la 1 tabla son experimentos diferentes)
Tengo que ordenar cada columna de menor a mayor y a la vez crear otra tabla de 4x4 con las etiquetas (0 y 1) ordenadas en cada experimento.
Se quedaria
1 1 1 1      0011
2 2 2 2      0010
3 3 3 3      1101
4 4 4 4      1100
¿Serian tres for anidados?

Pues sí, son tres for anidados con una condición. Te he puesto el array "num" para un caso más general en que los números de la matriz no sean consecutivos:
Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    int i,j,k,p=-1;
    int num[]={1,2,3,4};
    int v1[4][4]={{1,2,3,4},
                 {4,3,1,3},
                 {2,1,4,2},
                 {3,4,2,1}},
       v2[4][1]={0,
                 1,
                 0,
                 1};
    int b[4][4]={0},d[4][4]={0};
    for (k=0;k<4;k++){
      p++;
        for (i=0;i<4;i++){
            for (j=0;j<4;j++){
               if (v1[i][j]==num[p]) {
                  b[k][j]=v1[i][j];
                  d[k][j]=v2[i][0];
               }
            }
         }
    }
   for (i=0;i<4;i++){
      for (j=0;j<4;j++){
         printf ("%d  ",b[i][j]);
      }puts ("\n");
   }
   puts ("\n");
   for (i=0;i<4;i++){
      for (j=0;j<4;j++){
         printf ("%d  ",d[i][j]);
      }puts ("\n");
   }
    return  0;
}

Saluditos!. .....   :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

muymuyperdido

Cita de: leosansan en  1 Enero 2013, 15:46 PM
Código (cpp) [Seleccionar]
#include <stdio.h>

int main()
{
    int i,j,k,p=-1;
    int num[]={1,2,3,4};
    int v1[4][4]={{1,2,3,4},
                 {4,3,1,3},
                 {2,1,4,2},
                 {3,4,2,1}},
       v2[4][1]={0,
                 1,
                 0,
                 1};
    int b[4][4]={0},d[4][4]={0};
    for (k=0;k<4;k++){
      p++;
        for (i=0;i<4;i++){
            for (j=0;j<4;j++){
               if (v1[i][j]==num[p]) {
                  b[k][j]=v1[i][j];
                  d[k][j]=v2[i][0];
               }
            }
         }
    }
   for (i=0;i<4;i++){
      for (j=0;j<4;j++){
         printf ("%d  ",b[i][j]);
      }puts ("\n");
   }
   puts ("\n");
   for (i=0;i<4;i++){
      for (j=0;j<4;j++){
         printf ("%d  ",d[i][j]);
      }puts ("\n");
   }
    return  0;
}

Saluditos!. .....   :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
Muchisimas gracias! Pero podrias poner que hace cada cosa? :| Es que no lo acabo de entender  :-\

leosansan

#5
Cita de: muymuyperdido en  1 Enero 2013, 16:44 PM
Muchisimas gracias! Pero podrias poner que hace cada cosa? :| Es que no lo acabo de entender  :-\
Lo mejor es que corras el programa y "voila" hace lo que te pide.
Código (cpp) [Seleccionar]

int num[]={1,2,3,4};<==array con los numeros de la matriz inicial.
............................
for (k=0;k<4;k++){
     p++; <==inicio e incremento el array "num"
       for (i=0;i<4;i++){
           for (j=0;j<4;j++){
              if (v1[i][j]==num[p]) { <==voy cogiendo los distintos numeros de la matriz: el 1,2,3,4
                 b[k][j]=v1[i][j]; <==para cada num lo coloco en la linea correspodiente:los 1 en la primera, los 2 en la segunda ......
                 d[k][j]=v2[i][0]; <==veo las coincidencias con la matriz de control, la de ceros y unos y los meto en otra matriz
              }
           }
        }
   }
Pero como te comente, corre el programa y veras que te da la matriz
"b"         "d"
1 1 1 1      0011
2 2 2 2      0010
3 3 3 3      1101
4 4 4 4      1100

Saluditos!. .............  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


leosansan

Cita de: muymuyperdido en  1 Enero 2013, 20:41 PM
CitarSegún tú, el problema empieza con un: tengo una tabla asi
1 2 3 4
4 3 1 3
2 1 4 2
3 4 2 1

Pues el array "num" consta de los elementos de esa matriz:1,2,3,4. Lo uso porque si siempre fuera así el código podría ser más sencillo, pero con el uso del array me cubro las espaldas en caso de que los elementos de esa matriz no sean ni esos ni consecutivos.
Saluditos!. .....  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

muymuyperdido

Cita de: leosansan en  1 Enero 2013, 21:30 PM
Saluditos!. .....  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:
Pero eso era un ejemplo, no me expresé bien :|
La tabla original que tengo que ordenar son floats.

leosansan

#9
Cita de: muymuyperdido en  2 Enero 2013, 15:33 PM
Pero eso era un ejemplo, no me expresé bien :|
La tabla original que tengo que ordenar son floats.

Citar
Ya me lo imaginaba, por eso lo del array. En principio sólo tienes que declararlo como float en lugar de int y poner los valores correspondientes. Y en el printf en lugar de d pones g. ;-) ;-)
Pero mejor, y que sirva para otra, pon un ejemplo real aunque te parezca complicado ..... para que si no estamos aquí: para ayudar.

Saluditos !....nuevamente..y nuevamente: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: