[AYUDA] Obtener valores NO repetidos de un arreglo en C POR FAVOOORRR!!!!

Brandon Castillo
30 de Marzo del 2016

Hola. Tengo una grandisima duda que no he podido resolver. El problema es que necesito obtener los valores que no se repiten de un arreglo de enteros.

Por ejemplo A[5]={1,3,4,3,5};
deseo obtener los que no se repiten y guardarlo en otro arreglo.
Quedaría algo así "No repetidos: 1, 4, 5";

Espero y me puedan ayudar :') Se los agradecería mucho

int A[100], c;

//n es la longitud del array de numeros ingresados por el usuario

for(i=0; i<n; i++){
for(j=i; j>=0; j--){
if(A == A[j]){
}else{
c++;
}
}
}

int C[100];

for(i=0; i<c; i++){
for(j=i; j>=0; j--){
if(A == A[j]){
}else{
C = A;
u++;
if(C==c){
break;
}
}
}
}


Samuel Garcia
12 de Abril del 2016
Aquí tengo una grabación que muestra el código fuente cuando se escribió, para entenderlo
más fácilmente en lugar de simplemente leer la versión final:


http://devel.archefire.org/snippets/C/es/Obtener Números No Repetidos.html




Aquí tengo un video en YouTube que muestra cómo compilar y usar el programa:

https://www.youtube.com/watch?v=8vL62Op1pmc




Aquí está la versión final del código.
Compilarlo usando MinGW:
gcc numeros_no_repetidos.c -o numeros_no_repetidos.exe
Para correrlo:
numeros_no_repetidos 1 2 3 3 4 4 5 6 7 7 8 9 10 11 12 13


E imprimirá los números únicos (1 2 3 4 5 6 7 8 9 10 11 12 13).



#include //printf() #include //malloc(), free() #define TRUE 1 #define FALSE 0 int numero_repetido(int numero, int *arreglo_numeros, int cuenta_arreglo); //Tomar los números directamente de la línea de comandos: /// int main(int argc, char *argv[]) { //Preparar un número dinámico de enteros: /// int *numeros; // Arreglo de enteros de tamaño dinámico int cuenta_numeros=0; // Cuántos números están presentes realmente int numero_tmp; // Variable para conversión temporal de cadena a entero int x=0; // Variable general para bucles //Descontamos el primer parámetro que es el nombre del //programa mismo, de la cuente de parámetros (argc == "arg count"): /// argc--; //Indicar si hay suficientes parámetros: /// if(argc==0) { printf("ERROR: Por favor ingrese números enteros separados por espacios.n"); printf("n"); return -1; } //Reservar memoria para el número indicado de enteros //por los parámetros de línea de comandos. // //Necesitamos obtener el tamaño de un entero en memoria //y multiplicarlo por el número de argumentos: /// numeros = (int *)malloc(sizeof(int)*argc); //Recorremos cada uno de los valores separados por espacios. //Los convertimos de cadena de caracteres a número y vemos //si ya está en el arreglo: /// for(x=0; x<argc; x++) { //Obtenemos el parámetro actual de la línea de comandos. //Le sumamos 1 a x ya que anteriormente le restamos 1 y el //parámetro 0 es el nombre del programa mismo, así que si //si no hacemos esto perderíamos un número: /// numero_tmp=atoi(argv[x+1]); if( numero_repetido( numero_tmp,numeros,cuenta_numeros ) == FALSE ) { numeros[cuenta_numeros++]=numero_tmp; } } //Ahora simplemente mostramos el arreglo en pantalla: /// printf("Lista de números no repetidos: "); for(x=0; x<cuenta_numeros; x++) { printf("%d ", numeros[x]); } //Liberamos la memoria reservada para el arreglo numérico //en tiempo de ejecución, ya que llegamos al final del programa: /// free(numeros); return 0; } int numero_repetido(int numero, int *arreglo_numeros, int cuenta_arreglo) { int x=0; //Simplemente recorremos el arreglo especificado desde 0 //hasta el número especificado de elementos, y los comparamos //con el número que queremos ver si está repetido. // //Si lo encontramos, simplemente regresamos indicando que //lo encontramos y que por lo tanto estaría repetido en //ese arreglo: // /// for(x=0; x<cuenta_arreglo; x++) { if(arreglo_numeros[x]==numero)return TRUE; } return FALSE; }