[C con Clase] Ayuda con un programa en C!

Ali Rincon alrincon1963 en hotmail.com
Mie Abr 13 16:58:07 CEST 2016


El siguiente programa elimina las filas repetidas y ordena un vector de 1fila X nColumnas. El problema que tengo es que el programa no funciona cuando se introduce una componente nula, es decir, cero. Por ejemplo, vector1=[1,0,1,6,8] lo ordena como vector3=[1,6,8]. El programa se "come" la componente cero y no se por que lo hace asi. Alguien pudiera ayudarme a ver por que lo hace asi y como se puede solucionar??

Altamente agradecido,

Ali Rincon
 

#include <stdio.h>
#include <stdlib.h>

/**ordenarvector**/

/**Programa que dado un vector de N-columnas elimina elementos repetidos y ordena el vector en orden ascendente**/


int main()
{
    int i,j,k,m,nC,num,cont,repetidos;
    int *vector1;
    int *vector2;
    int *vector3;
    char c;

    /**Introduccion del numero de columnas del vector1**/

    printf("Introduzca el numero de columnas del vector1: ");
    scanf("%d", &nC);
    printf("\n");

    while((c=getchar()) != '\n' && c != EOF);

    /**Reserva dinamica de memoria para el vector1[i]**/

    vector1=(int *)malloc(nC * sizeof(int *));

    if(vector1== NULL)
    {
        printf("Error de memoria\n");
        exit(-1);
    }

   /**Introduccion de los valores del vector**/

    for(i=0; i<nC; i++)
    {
        printf("Introduzca las componentes del vector1[%d]: ",i+1);
        scanf("%d", &vector1[i]);
        printf("\n");
    }

    /**Visualizar el vector**/

    printf("vector1 = ");
    for(i=0; i<nC; i++)
    {
        printf("%d ",vector1[i]);
    }
    printf("\n\n");

    /**Reserva dinamica de memoria para el vector2[i]**/

    vector2=(int *)malloc(nC * sizeof(int *));

    if(vector2== NULL)
    {
        printf("Error de memoria\n");
        exit(-1);
    }

    /**Reserva dinamica de memoria para el vector3[i]**/

    vector3=(int *)malloc(nC * sizeof(int *));

    if(vector3== NULL)
    {
        printf("Error de memoria\n");
        exit(-1);
    }

    /**Eliminacion de las componentes repetidas en el vector1**/

    j=0;
    m=0;
    repetidos=0;
    for(i=0; i<nC; i++)
    {
        cont=0;
        num=vector1[i];
        vector2[j]=num;
        for(k=0; k<nC; k++)
        {
            if(vector2[k]==num)
            {
                cont++;
            }
        }
        if(cont==1)
        {
            vector3[m]=num;
            m++;
        }
        else
        {
            repetidos++;
        }
        j++;
    }

    printf("La cantidad de elementos repetidos son: %d",repetidos);
    printf("\n");
    printf("El vectorfinal tendra %d elementos",nC-repetidos);
    printf("\n\n");

    /**Visualizar el vector3**/

    printf("vector3 = ");
    for(i=0; i<nC-repetidos; i++)
    {
        printf("%d ",vector3[i]);
    }
    printf("\n\n");


Más información sobre la lista de distribución Cconclase