Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: muymuyperdido en 29 Diciembre 2012, 10:32 am



Título: Ordenación de tablas
Publicado por: 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?


Título: Re: Ordenación de tablas
Publicado por: durasno en 31 Diciembre 2012, 02:07 am
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


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 1 Enero 2013, 10:06 am
¿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:


Título: Re: Ordenación de tablas
Publicado por: leosansan en 1 Enero 2013, 15:46 pm
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
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int i,j,k,p=-1;
  6.    int num[]={1,2,3,4};
  7.    int v1[4][4]={{1,2,3,4},
  8.                 {4,3,1,3},
  9.                 {2,1,4,2},
  10.                 {3,4,2,1}},
  11.       v2[4][1]={0,
  12.                 1,
  13.                 0,
  14.                 1};
  15.    int b[4][4]={0},d[4][4]={0};
  16.    for (k=0;k<4;k++){
  17.      p++;
  18.        for (i=0;i<4;i++){
  19.            for (j=0;j<4;j++){
  20.               if (v1[i][j]==num[p]) {
  21.                  b[k][j]=v1[i][j];
  22.                  d[k][j]=v2[i][0];
  23.               }
  24.            }
  25.         }
  26.    }
  27.   for (i=0;i<4;i++){
  28.      for (j=0;j<4;j++){
  29.         printf ("%d  ",b[i][j]);
  30.      }puts ("\n");
  31.   }
  32.   puts ("\n");
  33.   for (i=0;i<4;i++){
  34.      for (j=0;j<4;j++){
  35.         printf ("%d  ",d[i][j]);
  36.      }puts ("\n");
  37.   }
  38.    return  0;
  39. }
  40.  
Saluditos!. .....   :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 1 Enero 2013, 16:44 pm
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int i,j,k,p=-1;
  6.    int num[]={1,2,3,4};
  7.    int v1[4][4]={{1,2,3,4},
  8.                 {4,3,1,3},
  9.                 {2,1,4,2},
  10.                 {3,4,2,1}},
  11.       v2[4][1]={0,
  12.                 1,
  13.                 0,
  14.                 1};
  15.    int b[4][4]={0},d[4][4]={0};
  16.    for (k=0;k<4;k++){
  17.      p++;
  18.        for (i=0;i<4;i++){
  19.            for (j=0;j<4;j++){
  20.               if (v1[i][j]==num[p]) {
  21.                  b[k][j]=v1[i][j];
  22.                  d[k][j]=v2[i][0];
  23.               }
  24.            }
  25.         }
  26.    }
  27.   for (i=0;i<4;i++){
  28.      for (j=0;j<4;j++){
  29.         printf ("%d  ",b[i][j]);
  30.      }puts ("\n");
  31.   }
  32.   puts ("\n");
  33.   for (i=0;i<4;i++){
  34.      for (j=0;j<4;j++){
  35.         printf ("%d  ",d[i][j]);
  36.      }puts ("\n");
  37.   }
  38.    return  0;
  39. }
  40.  
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  :-\


Título: Re: Ordenación de tablas
Publicado por: leosansan en 1 Enero 2013, 18:55 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
  1. int num[]={1,2,3,4};<==array con los numeros de la matriz inicial.
  2. ............................
  3. for (k=0;k<4;k++){
  4.      p++; <==inicio e incremento el array "num"
  5.        for (i=0;i<4;i++){
  6.            for (j=0;j<4;j++){
  7.               if (v1[i][j]==num[p]) { <==voy cogiendo los distintos numeros de la matriz: el 1,2,3,4
  8.                  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 ......
  9.                  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
  10.               }
  11.            }
  12.         }
  13.    }
  14. Pero como te comente, corre el programa y veras que te da la matriz
  15. "b"         "d"
  16. 1 1 1 1      0011
  17. 2 2 2 2      0010
  18. 3 3 3 3      1101
  19. 4 4 4 4      1100
  20.  
Saluditos!. .............  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 1 Enero 2013, 20:41 pm
No entiendo que es la matriz num :|



Título: Re: Ordenación de tablas
Publicado por: leosansan en 1 Enero 2013, 21:30 pm
Citar
Segú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:


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 2 Enero 2013, 15:33 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.


Título: Re: Ordenación de tablas
Publicado por: leosansan en 2 Enero 2013, 16:29 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:


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 3 Enero 2013, 11:12 am
Saluditos !....nuevamente..y nuevamente: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

45.0  184.0  56.0
67.0  134.3  89.1
12.2  210.2   30.4
95.9 181.0   76.8
:) Graciasss!!!!


Título: Re: Ordenación de tablas
Publicado por: leosansan en 3 Enero 2013, 17:10 pm
45.0  184.0  56.0
67.0  134.3  89.1
12.2  210.2   30.4
95.9 181.0   76.8
:) Graciasss!!!!
Me falta la matriz de control, aunque me extraña la matriz que me pasas ya que no se repite ningún número ........
Saluditos!. ........... :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:


Título: Re: Ordenación de tablas
Publicado por: muymuyperdido en 5 Enero 2013, 11:57 am
Ese es el problema, que no hay matriz, es simplemente ordenar cada columna de menor a mayor