Título: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: palacio29 en 23 Junio 2016, 01:06 am Hola
Como veran soy bastante novato en C ,y desde la facultad me piden este tipo de ejercicio pero no logro hacerlo funcionar. He logrado realizar la carga de un arreglo sin incluir repetidos pero cuando estamos ingresando los datos...Pero una vez que tengo el arreglo cargado nose como modificar el arreglo para que me de sin repetidos. Agradeceria cualquier ayuda Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: csergioc en 23 Junio 2016, 01:29 am Este ejemplo estaba en el foro, lo probé y funciona perfectamente, espero que te ayude!
Código: #include <stdio.h> Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: dwarf271 en 12 Enero 2019, 16:53 pm Estoy con la misma problematica del muchacho, pero no entiendo ese codigo y lo probé y no funciona.
Saludos. Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: Serapis en 12 Enero 2019, 17:52 pm Hay varia smaneras, una smás optimas que otras, y según el caso hay un algoritmo (counting Sort) que resulta el más efectivo pero puede incurrir en un costo excesivo de memoria (asocaidos al valor máximo y mínimo) y al mismo tiempo de tiempo (si el array es pequeño pero dichos valores son muy distantes entre sí...
Así que te indicaré la manera adecuada para todos los casos (y no solo números o número enteros). 1 - Ordenar el array. 2 - Recorrer el array con dos bucles. El externo (el primero) empieza por el primer ítem en el array y acaba en el penúltimo. Este penúltimo, se irá reduciendo a medida que se tapen los repes con los que están por encima. Puede hacerse con un bucle while, condicionado a alcanzar el último -1, teniendo en cuenta que el último se va reduciendo en la medida en que aparezcan los repes. El interno es también un bucle de tipo 'while' se repite el valor tomado en el primer bucle, la cuenta en este empieza (la primera vez solo) uno más arriba que el primero y acaba condicionado mientras se repita y no se alcanza el último índice del array. Código: // Realiza 3 operaciones: 1-ordenar el array, bajar los no repes tapando los repes, y copia a un nuevo array los no repes. Pasar el código a pseudocódigo, sin cometer errores (y corigiendo algún gazapo que se me haya escapado, cosas de +1, -1, etc... que a veces se escapa al hacerlo de corrido), queda enteramente a tu esfuerzo... lo que te exige entenderlo, no copiar y pegar. Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: Beginner Web en 13 Enero 2019, 04:39 am Bueno puede ser que pidas eliminar los que se repiten o conservar valores unicos, eso fue lo que entendi perdon, un ejemplo con caracteres seria este, con numeros es casi lo mismo, cuando encuentras uno repetido haces que todo el arreglo se corra 1 posicion a la izquierda y luego el indicador final decrementa en 1 tambien , eso en cada recorrido.
Mira: Código
Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: Serapis en 14 Enero 2019, 16:15 pm Ana, aunque tu descripción técnicamente es correcta, es subóptima...
Imagina un array de 1 millón de elementos, entonces tienes que para buscar repes en un millón de elementos, por cada repe hay que mover todos los de encima. El peor caso sería que todo el array tuviera un único y mismo valor, lo que implica que el segundo array se ejecutaría la primera vez 1 millon-1, el segundo ciclo 1 millón menos 2, el tercer ciclo un millón menos 3... así hasta que lleguemos al penúlimo el 999998 que solo moveremos 1. La descripción que yo doy es la misma, pero el movimiento de ítems está optimizado, ninguno se mueve más de 1 vez. Para ello basta llevar adecuadamente actualizado cada índice... De la descripción dada, tan solo varía que al final, se entrega un array con solo los elementos no repetidos, que han sido copiados a un nuevo array, que a fin de cuentas es algo opcional según se necesite o no. Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: dijsktra en 15 Enero 2019, 11:40 am El problema es bonito, pero no trivial. Con ánimo constructivo ;-)
La que propongo, ya implementada en C++, requiere ordenar el vector, cosa que se puede hacer con las rutinas de STL, en complejidad O(nlog(n)), y la que hace el proceso de "soltar" los repetidos está en O(n). En total O(nlog(n)) que es mejor que O(n^2). Fijaos que es muy simple, aunque no tan sencillo de demostrar que sea correcta. Fijaos en los dibujos que ilustran el invariante y podr'eis ententer como progresa el algoritmo. Código
Algunos ejemplos de entreada. La primera linea marca el numero de elementos, la segunda el vector a considerar. Código: 6 Código: 3 Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: Serapis en 15 Enero 2019, 22:05 pm dijsktra, creo que no has revisado adecuadamente mi pseudocódigo... está en un tiempo O(n)
El bucle externo, recorre una sola vez cada elemento único, ya que la condición final, se va decrementando en el bucle interno, razón por la que se elige un bucle 'while'. Si un array tiene pongamos 1000 elementos y hay 250 repes... el bucle externo, primero apunta a 999, pero al final solo habrá llegado hasta al 749. El bucle interno, en cambio solo recorre esos 250 repes, la suma de ambos es pués el total 1000 elementos. Por supuesto alguna pequeña optimización puede hacerse, quizás eliminando variables, etc... pués está redactado al vuelo... La declaración de variables 'no inicializadas', ya te he respondido en alguna ocasión, que en pseudocódigo uno no tiene necesidad de dar detalles que distraigan la atención de lo que se pretende explicar, toda vez que cualquier programador podrá entender sin problemas tales detalles nimios. Así poner el valor de un número a cero, es innecesario en pseudocódigo, otra cosa es que el valor inicialmente deba ser distinto del valor que tiene por defecto cada tipo de variable... es decir el pseudocódigo se abstrae de las características de todos los lenguajes, porque ya el que aplique algo a su lenguaje u otro aplicará lo que tal o cual lenguaje exija. Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: dijsktra en 16 Enero 2019, 15:06 pm NEBIRE, me alegro de participar contigo.
Yo también soy partidario de escribir en pseudo-código, máxime cuando este da facilidades que los lenguajes "reales" no ofrecen, como asignación simultánea.... (En este sentido, me encanta más Python) Pero el valor inicial de una variable es algo esencial a tener explícitamente en cuenta. Tu algoritmo se puede escribir más simple, y eso hace que el programador (no la máquina) lo entienda mejor. Código: P : sorted(V=A[0..N) Que efecitvamente, esta en O(n), ya que la instrucción crítica (n<N) se ejecuta un máximo de N veces. (Siendo pedantes, también está en O(n^2) , en O(n^56) :xD) Erratas tenemos todos... Pero también los ingleses dicen que "el diablo está en los detalles"... Título: Re: Duda - Como eliminar numeros repetidos de un arreglo en C? Publicado por: KrishCM en 30 Agosto 2019, 23:52 pm Reduciendo un poco lo hecho por el compa del principio:
Código: #include<iostream> |