Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ordenar una matriz sin repetir numeros.

Estas en el tema de Ordenar una matriz sin repetir numeros. en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 23/04/2016, 16:52
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 9 años, 4 meses
Puntos: 0
Pregunta Ordenar una matriz sin repetir numeros.

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 C:
Ver original
  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.     }
  #2 (permalink)  
Antiguo 24/04/2016, 02:19
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Ordenar una matriz sin repetir numeros.

Para que no se repitan yo lo veo difícil por no decir imposible ya que la matriz es más grande que el rango de números, o sea que 5*5=25 y tu rango es del 1 al 10 por lo que números repetidos tiene que haber. Explicate mejor.
  #3 (permalink)  
Antiguo 24/04/2016, 04:52
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Ordenar una matriz sin repetir numeros.

Para cada número generado tendrías que comprobar que dicho número no está ya en la matriz. Esto último lo consigues con un nuevo bucle que recorra la matriz desde el principio hasta el último número introducido. Si resulta que el número ya existe generas uno nuevo y repites la búsqueda hasta dar con un número que no esté repetido.

Dicho así parece un coñazo, pero para eso se inventaron los bucles jejeje.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #4 (permalink)  
Antiguo 24/04/2016, 12:50
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Ordenar una matriz sin repetir numeros.

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 C:
Ver original
  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
  #5 (permalink)  
Antiguo 24/04/2016, 13:00
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Ordenar una matriz sin repetir numeros.

Hay una forma más eficiente que consiste en emular random_suffle, o sea que creas los números en orden ascendente y luego barajas sus posiciones y así seguro tendrás una lista random sin elementos repetidos.
  #6 (permalink)  
Antiguo 24/04/2016, 14:17
 
Fecha de Ingreso: julio-2015
Mensajes: 15
Antigüedad: 9 años, 4 meses
Puntos: 0
Respuesta: Ordenar una matriz sin repetir numeros.

Cita:
Iniciado por aguml Ver Mensaje
Hay una forma más eficiente que consiste en emular random_suffle, o sea que creas los números en orden ascendente y luego barajas sus posiciones y así seguro tendrás una lista random sin elementos repetidos.
Estoy trabajando solo con lenguaje C.
  #7 (permalink)  
Antiguo 24/04/2016, 23:06
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Ordenar una matriz sin repetir numeros.

Cita:
Iniciado por veravluis Ver Mensaje
Estoy trabajando solo con lenguaje C.
Eso es indiferente. Te están comentando otra forma de hacerlo. C++ no es el único lenguaje capaz de trabajar con números aleatorios. De hecho, lo único que hace random_shuffle es aplicar un número determinado de intercambio de valores para mezclar convenientemente una lista dada.

Por cierto aguml. Tu forma es más eficiente si un requisito es que la matriz se rellene con secuenciales desordenados... Para números aleatorios puros tu solución no sería la más adecuada porque una ristra de secuenciales desordenados no es lo mismo que números aleatorios.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.
  #8 (permalink)  
Antiguo 25/04/2016, 08:29
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 9 meses
Puntos: 3
Respuesta: Ordenar una matriz sin repetir numeros.

Si si, lo dije por lo de que no se podían repetir no más. Si quieres por ejemplo que sea más aleatorio y que no se repitan una idea que se me ocurre es usar un rand psra obtener un valor por ejemplo de 0 a 3 y ese valor se lo sumas al contador secuencial y cuando acabas barajas. Con eso obtendrías una lista en la que faltarían valores y barajada.

Etiquetas: int, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:17.