Ordenar una matriz sin repetir numeros.

Iniciado por veravluis, 24 Abril 2016, 00:56 AM

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

veravluis

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.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define filas 5
#define columnas 5

int i,j;

int main() {

srand(time(NULL));
int num;
int matriz[filas][columnas];
//num = rand()%1+9;

for(i = 0; i < filas;i++) {
printf("\n");
for(j = 0; j < columnas;j++){
matriz[i][j] = rand()%9+1;
printf("%d ",matriz[i][j]);
}
}

return 0;
}

fary

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
Un byte a la izquierda.

veravluis

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.


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define filas 5
#define columnas 5

void cargar_matriz(int matriz[filas][columnas]);
void ordenar_matriz(int matriz[filas][columnas]);
void imprimir_matriz(int matriz[filas][columnas]);

int i,j,k,l;

    int main()  {
   
    int matriz[filas][columnas];
   
    cargar_matriz(matriz);
    ordenar_matriz(matriz);
    imprimir_matriz(matriz);
       
    return 0;   
    }//Fin main
   
   
    void cargar_matriz(int matriz[filas][columnas]){
   
    for(i = 0; i < filas; i++) {
       
        for(j = 0; j < columnas; j++) {
        matriz[i][j] = rand()%25+1;
}
}
   
}//Fin función


void ordenar_matriz(int matriz[filas][columnas]){

int mayor;

for(i = 0; i < filas;i++)   {

            for(j = 0; j < columnas;j++){
           
            for(k = 0; k < 5;k ++) {
           
            for(l = 0; l < 5; l++) {
           
            if(matriz[i][j] < matriz[k][l]) {
           
            mayor = matriz[i][j];
            matriz[i][j] = matriz[k][l];
            matriz[k][l] = mayor;
           
}
}
}

            }
        }
}//Fin Función.

void imprimir_matriz(int matriz[filas][columnas]){

for(i = 0; i < filas; i++) {
        printf("\n");
        for(j = 0; j < columnas; j++) {
        printf(" %d ",matriz[i][j]);
}
}
}//Fin función

MAFUS

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).

veravluis

Cita de: 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).

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

MAFUS

El enunciado es muy vago en su descripción. No sé que hay que hacer.