Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: veravluis en 24 Abril 2016, 00:56 am



Título: Ordenar una matriz sin repetir numeros.
Publicado por: veravluis en 24 Abril 2016, 00:56 am
Hola a todos, una pregunta como podría ordenar esta matriz de números aleatorios & hacer que no se repitieran ? Gracias por cierto me recomiendan algun libro de C para leer o algo gracias.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define filas 5
  5. #define columnas 5
  6.  
  7. int i,j;
  8.  
  9. int main() {
  10.  
  11. srand(time(NULL));
  12. int num;
  13. int matriz[filas][columnas];
  14. //num = rand()%1+9;
  15.  
  16. for(i = 0; i < filas;i++) {
  17. printf("\n");
  18. for(j = 0; j < columnas;j++){
  19. matriz[i][j] = rand()%9+1;
  20. printf("%d ",matriz[i][j]);
  21. }
  22. }
  23.  
  24. return 0;
  25. }
  26.  


Título: Re: Ordenar una matriz sin repetir numeros.
Publicado por: fary en 24 Abril 2016, 09:16 am
Puedes usar el metodo burbuja para ordenarlos de menor al mayor o viceversa. Para no incorporar los datos que esten repetidos simplemente comprueba que en tu array no esta el número, si el numero ya esta en el array genera otro nuevo.

saludos.

https://es.wikipedia.org/wiki/Ordenamiento_de_burbuja


Título: Re: Ordenar una matriz sin repetir numeros.
Publicado por: veravluis en 24 Abril 2016, 20:54 pm
Un ejemplo como podría hacer para que no se repitieran los números debería agregar una función o agregarlo a una de las que ya tengo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define filas 5
  5. #define columnas 5
  6.  
  7. void cargar_matriz(int matriz[filas][columnas]);
  8. void ordenar_matriz(int matriz[filas][columnas]);
  9. void imprimir_matriz(int matriz[filas][columnas]);
  10.  
  11. int i,j,k,l;
  12.  
  13.    int main()  {
  14.  
  15.     int matriz[filas][columnas];
  16.  
  17.     cargar_matriz(matriz);
  18.     ordenar_matriz(matriz);
  19.     imprimir_matriz(matriz);
  20.  
  21.    return 0;  
  22.    }//Fin main
  23.  
  24.  
  25.    void cargar_matriz(int matriz[filas][columnas]){
  26.  
  27.     for(i = 0; i < filas; i++) {
  28.  
  29.         for(j = 0; j < columnas; j++) {
  30.         matriz[i][j] = rand()%25+1;
  31. }
  32. }
  33.  
  34. }//Fin función
  35.  
  36.  
  37. void ordenar_matriz(int matriz[filas][columnas]){
  38.  
  39. int mayor;
  40.  
  41. for(i = 0; i < filas;i++)   {
  42.  
  43.            for(j = 0; j < columnas;j++){
  44.  
  45.             for(k = 0; k < 5;k ++) {
  46.  
  47.             for(l = 0; l < 5; l++) {
  48.  
  49.             if(matriz[i][j] < matriz[k][l]) {
  50.  
  51.             mayor = matriz[i][j];
  52.             matriz[i][j] = matriz[k][l];
  53.             matriz[k][l] = mayor;
  54.  
  55. }
  56. }
  57. }
  58.  
  59.            }
  60.        }
  61. }//Fin Función.
  62.  
  63. void imprimir_matriz(int matriz[filas][columnas]){
  64.  
  65. for(i = 0; i < filas; i++) {
  66.         printf("\n");
  67.         for(j = 0; j < columnas; j++) {
  68.         printf(" %d ",matriz[i][j]);
  69. }
  70. }
  71. }//Fin función
  72.  


Título: Re: Ordenar una matriz sin repetir numeros.
Publicado por: MAFUS en 24 Abril 2016, 22:07 pm
De entrada se me plantea una duda:
Si la matriz ordenada no puede repetir ningún número puede que sea de menor tamaño que la matriz original. Siendo así:
¿La matriz ordenada debe ser la misma matriz original? Si la matriz original es estática, eso es definida del tipo T[dimY][dimX], no se puede reducir su tamaño. ¿Cómo se marcan las casillas vacías? ¿Cómo se distribuye la información en la matriz?
Si la matriz original es dinámica se pueden reducir sus dimensiones pero de nuevo aparece el problema de como se distribuye el sistema si no se pueden cuadrar las dimensiones (número impar de elementos).


Título: Re: Ordenar una matriz sin repetir numeros.
Publicado por: veravluis en 24 Abril 2016, 22:27 pm
De entrada se me plantea una duda:
Si la matriz ordenada no puede repetir ningún número puede que sea de menor tamaño que la matriz original. Siendo así:
¿La matriz ordenada debe ser la misma matriz original? Si la matriz original es estática, eso es definida del tipo T[dimY][dimX], no se puede reducir su tamaño. ¿Cómo se marcan las casillas vacías? ¿Cómo se distribuye la información en la matriz?
Si la matriz original es dinámica se pueden reducir sus dimensiones pero de nuevo aparece el problema de como se distribuye el sistema si no se pueden cuadrar las dimensiones (número impar de elementos).

Entonces cuando cargo los números es que debería revisar si están repetido?


Título: Re: Ordenar una matriz sin repetir numeros.
Publicado por: MAFUS en 25 Abril 2016, 00:29 am
El enunciado es muy vago en su descripción. No sé que hay que hacer.