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

Salvador Pozo salvapozo en gmail.com
Jue Abr 14 13:15:43 CEST 2016


Hola:

He encontrado algunos errores, algunos no tienen mucha importancia para el funcionamiento del programa, pero habría que corregirlos.
Me refiero a las sentencias que usas para obtener memoria dinámica para los vectores:
vector1=(int *)malloc(nC * sizeof(int *));
Se trata de vectores de enteros, no de punteros a enteros, de modo que en sizeof, el tipo debería ser int, y no int*. El programa funciona porque generalmente, el tamaño de int* es igual o mayor que el de int, pero podría ser al revés, y el resultado no sería tan bueno.

Otro error que veo es que usas valores del vector2 en comparaciones, cuando el contenido de vector2 nunca ha sido iniciado:

--8<----
        vector2[j]=num;
        for(k=0; k<nC; k++)
        {
            if(vector2[k]==num)
            {
                cont++;
            }
        }
--8<----
El vector2 sólo tiene valores válidos para valores de k menores o iguales que j, de modo que en la mayor parte de las comparaciones el valor es desconocido.

Cuando yo he ejecutado el programa me ha funcionado correctamente, y me ha eliminado los valores repetidos, y no el cero. Pero eso es porque en mi caso, los valores del array vector2 son distintos de cero. En tu caso, sospecho que vector2 contiene ceros, y por eso elimina el cero.

El error está, efectivamente, en el algoritmo que elimina repetidos, pero como desconozco el algoritmo, me resulta difícil saber dónde exactamente.

En cualquier caso, me parece que en el bucle for anterior, el límite final debería ser j, y no nC-1:

--8<----
        vector2[j]=num;
        for(k=0; k<=j; k++)
        {
            if(vector2[k]==num)
            {
                cont++;
            }
        }
--8<----

Hasta pronto.


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