Problema Ordenar Matriz

Iniciado por Decay15, 26 Mayo 2016, 22:53 PM

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

Decay15

Buenas noches,
Estoy intentando hacer este problema donde te piden una matriz mxn y tienes que dar un vector con todos los elementos que aparecen en la matriz de forma que no se repitan los números (si un numero esta mas de una vez en la matriz se obvia) y ese vector tiene que estar ordenado de menor a mayor.
Los datos que me dan son que utilice estas dos funciones:

buscarVector(v, n, numero, pos): esta función devuelve el valor 1 si el numero se encuentra en el vector v y 0 en caso contrario. La longitud de v es n. Pos devolverá la posición del vector donde se encontró el número o donde debería insertarse para que el vector v siguiera ordenado de menor a mayor.

repetidosMatriz(matriz, m, n, numeros, l): dada la matriz mxn, devuelve el vector números de longitud l. este vector ordena todos los numeros existentes en la matriz. Se debe usar la función anterior de forma que el vector vaya quedando ordenado conforme se escribe y no haya repetidos.

Ejemplo: 0 9 2 4 6 --> devuelve (0, 1, 2, 4, 5, 6, 8, 9)
            5 6 1 8 0
            4 8 0 2 9

La verdad es que ando un poco perdido, adjunto lo que llevo realizado pero cuando termino de definir la matriz me da error. Muchas gracias de antemano.

#include<stdio.h>
#include<stdlib.h>
#define TAM 50

void dimension(int *m,int *n){

    printf("Dime las dimensiones de la matriz M (m,n):");
    scanf("%d,%d",&*m,&*n);

}

void matriz(int x[TAM][TAM],int m,int n){

   int i,j;

    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
                printf("Dime el valor del elemento (%d,%d)",i+1,j+1);
                scanf("%d",&x[j]);

        }
    }
}
void mostrarMatriz(int x[TAM][TAM],int m,int n){

   int i,j;

    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
                printf("%d ",x[j]);

        }
        printf("\n");
    }
}

int buscarVector(int v[TAM],int n,int numero,int pos){

    int i,j,aux;
    v[0]=0;
    printf("%d",n);
    for(i=0;i<n;i++){
        if(numero==v){
            return(1);
        }
    }
    i=0;
    while(numero<v){
        pos=i;
        i++;
    }

    for(i=pos;i<n+1;i++){
        aux=v;
        v[pos]=numero;
        v[i+1]=aux;
    }

    return(0);
}

void escribir(int x[TAM],int l){

    int i;

    printf("Los valores del vector son:\n");

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

            printf("%d ",x);

    }
    printf("\n");
}

void repetidosMatriz(int matriz[TAM][TAM],int m, int n,int numeros[TAM],int *l){

    int i,j,numero,pos;
    *l=1;
    for(i=0;i<m;i++){
        for(j=0;j<n;j++){
            numero=matriz[j];
            if(buscarVector(numeros[TAM],*l,numero,pos)==0){

                *l++;
            }
        }
    }

}
int main(){

int M[TAM][TAM],m,n,numeros[TAM],l;

dimension(&m,&n);
matriz(M,m,n);
mostrarMatriz(M,m,n);
repetidosMatriz(M,m,n,numeros,&l);
escribir(numeros,l);


system("pause");
return(0);
}

AlbertoBSD

En el for en el scanf

scanf("%d",&x[j]);

cuando deberia de ser

scanf("%d",&x[i][j]);

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Decay15

Cita de: AlbertoBSD en 26 Mayo 2016, 23:04 PM
En el for en el scanf

scanf("%d",&x[j]);

cuando deberia de ser

scanf("%d",&x[i][j]);

Saludos

Gracias por responder tan rápido!
Nose porque lo que copio de mi compilador no corresponde al 100% con lo que se muestra en el foro, tanto en el scanf como dentro de la funcion buscarVector donde pongo if(numero==v(i), no salen a veces los corchetes =/.

igualmente mi duda viene despues de inicializar la matriz, a la hora de buscar y ordenar el vector con los elementos de la matriz el programa peta, realemente no creo que sea un fallo de ese estilo, sino que no tengo muy claro como hacer lo de buscar y ordenar los numeros.
Muchas garcias

AlbertoBSD

Si el programa falla es por que posiblemente estas escribiendo o leyendo de un area fuera de los limites de la matriz.

Tienes que buscar un algoritmo de ordenamienro y apegarte a el...


De ser posible yo ordenaria los elementos antes de agregarlos a la matriz ya que manipularlos dentro de la matriz puede complicarse un poco en especial si no tienes experiencia ordenando dartos en un arreglo sencillo. Se te complicará hacerlo ya estando en una matriz.


Yo manejaria un arrglo lineal y apara pedir elementos de la matriz utilizaria un desfazamiento de

(Fila * numero total de columnas) + columna pedida.

Saludos.

PD. Lo que.dices de el codigo es por que no lo po es con la etiqueta geshi de lenguaje c
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW