elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Cómo eliminar un elemento de un array dinámico - CONSULTA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cómo eliminar un elemento de un array dinámico - CONSULTA  (Leído 855 veces)
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Cómo eliminar un elemento de un array dinámico - CONSULTA
« en: 11 Diciembre 2018, 21:26 pm »

Buenas a todos, quería saber cómo podría eliminar un dato repetido en un arreglo dinámico, lo primero que hice fue ordenarlo de menor a mayor, para que los valores repetidos quedaran juntos, el tema es, cómo debería utilizar un nuevo puntero para que éste sólo copie los valores no repetidos.
Ya le busqué la vuelta,pero siempre me muestra los mismos valores, no quita los repetidos, tampoco se reduce mi nuevo vector.



En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #1 en: 11 Diciembre 2018, 21:32 pm »

Si tienes el vector ordenado es más fácil. Piensa que al estar ordenado sólo tienes que comprobar que el nuevo valor que vas a meter no es igual al último elemento del array final.
Si no estuviese ordenado tendrías que revisar todo el array final para ver que el valor que vas a introducir no está ya en el array.
Si el array es dinámico tendrás que hacer algún cálculo para saber el nuevo tamaño.

Entonces recorres el array que tienes con los valores repetidos y para cada elemento, si el array final está vacío o este elemento es distinto al último que has introducido en el array final, entonces lo introduces, sino, pasas al siguiente elemento. Suerte :-X

Ver el código que tienes puede ayudar...


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #2 en: 11 Diciembre 2018, 21:36 pm »

Si quieres resolver el no tener duplicados sin programarlo explícitamente, crea un set. Los sets solo almacenan valores únicos.
En línea

Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #3 en: 11 Diciembre 2018, 22:46 pm »

Ver el código que tienes puede ayudar...

Aquí te dejo mi código, en éste tenía que crear un struc con dos punteros que apuntaran a cualquier par repetido y si no había, retornaba los dos punteros del struc con el valor nulo, sino, retornaba los valores. PD: Tenía que hacerlo dentro de una función.
Ahora bien, el siguiente ejercicio, me pedía que a esos valores repetidos lo elimine, teniendo así, un nuevo arreglo sin los datos repetidos. El tema es que no sé el cómo hacer eso, los ordené, pero hasta ahí llego  :-( No entiendo muy bien lo del array final y eso, me puedes dar un ejemplo simple?

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <iomanip>
  5. using namespace std;
  6. struct Apuntadores{
  7. int *a1=nullptr,*a2=nullptr;
  8. };
  9. void Acomodar_arreglo(int *a, int size);
  10. Apuntadores Buscar_repetidos(int *a, int size);
  11. int main(int argc, char *argv[]) {
  12. srand(time(0));
  13. int *p=nullptr, n;
  14. cout<<"Ingrese el tamanio del vector: "; cin>>n;
  15. p=new int [n];
  16. for(int i=0;i<n;i++) {
  17. p[i]=1+rand()%10;
  18. }
  19. for(int i=0;i<n;i++) {
  20. cout<<p[i]<<setw(2)<<" ";
  21. } cout<<endl;
  22. Acomodar_arreglo(p,n);
  23. for(int i=0;i<n;i++) {
  24. cout<<p[i]<<setw(2)<<" ";
  25. }
  26. cout<<endl;
  27. Apuntadores A=Buscar_repetidos(p,n);
  28. if(A.a1==nullptr && A.a2==nullptr){
  29. cout<<"No hay valores repetidos";
  30. }else{
  31. cout<<"Los valores repetidos son: "<<*(A.a1)<<" y "<<*(A.a2)<<endl;
  32.  
  33. delete [] p;
  34. return 0;
  35. }
  36.  
  37.  
  38. void Acomodar_arreglo(int *a, int size){
  39. int guardar;
  40. for(int i=0;i<size;i++) {
  41. for(int j=0;j<size;j++) {
  42. if(a[j]>=a[j+1]){
  43. guardar=a[j];
  44. a[j]=a[j+1];
  45. a[j+1]=guardar;
  46. }
  47. }
  48. }
  49.  
  50. }
  51. Apuntadores Buscar_repetidos(int *a, int size){
  52. Apuntadores A;
  53. for(int i=0;i<size;i++) {
  54. if(a[i]==a[i+1]){
  55. A.a1=a+i;
  56. A.a2=a+i+1;
  57. }
  58. }
  59. return A;
  60. }
« Última modificación: 11 Diciembre 2018, 22:50 pm por Cero++ » En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #4 en: 11 Diciembre 2018, 22:47 pm »

Si quieres resolver el no tener duplicados sin programarlo explícitamente, crea un set. Los sets solo almacenan valores únicos.


No sé qué es un set  :-(
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #5 en: 11 Diciembre 2018, 22:58 pm »

http://www.cplusplus.com/reference/set/set/
En línea

Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #6 en: 12 Diciembre 2018, 15:51 pm »

Gracias, pero quiero aprender a hacerlo yo mismo antes de usar funciones pre-hechas.
Hice este código, no funciona para eliminar, pero que tan errado estoy? Sigo sin entender.

Código
  1. int *Eliminar_repetidos(int *a, int size){
  2. int *aux2=nullptr;
  3. int contador=0;
  4. for(int i=0;i<size;i++) {
  5. if(a[i]==a[i+1]){
  6. contador++;
  7. }
  8. }
  9. for(int i=0;i<size-contador;i++) {
  10. aux2[i]=0;
  11. }
  12. aux2=new int [size-contador];
  13. int i=0;
  14. while(a[i]!=a[i+1] || i<size-contador){
  15. aux2[i]=a[i];
  16. i++;
  17. }
  18. delete [] a;
  19. return aux2;
  20. }
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 834



Ver Perfil
Re: Cómo eliminar un elemento de un array dinámico - CONSULTA
« Respuesta #7 en: 12 Diciembre 2018, 17:33 pm »

Bueno, algunos de tus errores:
- En las líneas 9-10 accedes al array nuevo pero no reservas memoria en él hasta la línea 12.
- Al terminar no sabes cual es el tamaño del nuevo array para poder recorrerlo.

Recomendaciones:
- Pasa el puntero por referencia, cuando tienes el nuevo terminado se lo asignas al original (no sin antes haber liberado la memoria del primero).
- En el <for> de las líneas 4-8 en vez de contar los que son iguales, cuenta los que son distintos (cambiando el "==" por "!=" en el <if>).
- Haz que la función devuelva el nuevo tamaño del array porque sino no puedes recorrerlo (tambien puedes pasar el segundo parámetro por referencia para modifcarlo, pero tendrás que hacerlo al final de la función).

Suerte :-X
En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Eliminar un elemento en un Array
Programación Visual Basic
edgar_allan 4 31,416 Último mensaje 16 Enero 2009, 02:17 am
por LeandroA
Array dinamico
Java
Shell Root 6 9,195 Último mensaje 11 Junio 2011, 17:10 pm
por Valkyr
¿Cómo eliminar un elemento de un vector y correr los espacios en java?
Java
ShadowA7X 2 11,926 Último mensaje 25 Agosto 2016, 16:32 pm
por ShadowA7X
Como crear un array (o arreglo) dinamico
Java
MrSimpatia 2 445 Último mensaje 6 Octubre 2018, 01:53 am
por MrSimpatia
(Pregunta): ¿Como puedo eliminar/remover un elemento HTML?
Desarrollo Web
MiguelCanellas 3 699 Último mensaje 3 Marzo 2019, 15:30 pm
por EdePC
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines