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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Nodos y punteros, ayuda C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Nodos y punteros, ayuda C++  (Leído 2,031 veces)
freakfreckles

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Nodos y punteros, ayuda C++
« en: 7 Diciembre 2014, 22:51 pm »

Buenas! Soy estudiante de computación y estoy trabada con algo a ver si me pueden ayudar! Estoy usando el codeblocks en linux
tengo una galería de imagenes construida por nodos, y tengo que poder agregar una imagen, votarla y ordenarla por orden de llegada y por votos
Ya cuento con la galeria ordenada hasta que agrego una nueva imagen, y mi misión es votarla y ordenarla en el resto de la lista. Lo que me está complicando es el intercambio del nodo desordenado con el nuevo lugar. Ya que no puedo usar swap simplemente. Debería arreglar los punteros de los nodos manualmente. No se si se entiende, les paso mi estructura del Nodo y las funciones. El error que me sale es "segmentation fault" y no me deja verificar si lo que hice esta bien, agradecería su ayuda.

Código
  1. struct Nodo {
  2. Imagen elemento;
  3. Nodo* sigLlegada;
  4. Nodo* sigVotos;
  5. int votos;
  6. };
  7.  
  8. class Lista {
  9. public:
  10. Nodo* prmLlegada;
  11. Nodo* prmVotos;
  12. };
  13. void GaleriaImagenes::agregarImagen(const Imagen &imagen) {
  14.  
  15. Nodo* nuevo = new Nodo;
  16. nuevo -> elemento = imagen;
  17. nuevo -> sigLlegada = NULL;
  18. nuevo -> sigVotos = NULL;
  19. nuevo -> votos = 0;
  20.  
  21. if(imagenes.prmLlegada == NULL){
  22. imagenes.prmLlegada = nuevo;
  23. }
  24. else{
  25. Nodo* i = imagenes.prmLlegada;
  26. Nodo* j = imagenes.prmVotos;
  27.  
  28. while( i -> sigLlegada != NULL){
  29. i = i -> sigLlegada;
  30. }
  31. i -> sigLlegada = nuevo;
  32. while( j -> sigVotos != NULL){
  33. j = j -> sigVotos;
  34. }
  35. j -> sigVotos = nuevo;
  36. }
  37. }
  38.  
  39. void GaleriaImagenes::votar(const Imagen &imagen) {
  40. Nodo* i = imagenes.prmVotos;
  41. while (!(i -> elemento == imagen)){
  42. i = i -> sigVotos;
  43. }
  44. i -> votos = i -> votos + 1;
  45. Nodo* k = i -> sigVotos;
  46. while(k -> votos == i -> votos - 1){
  47. k = k -> sigVotos;
  48. }
  49.   Nodo* j = k;
  50.    k = i-> sigVotos;
  51.    i= j -> sigVotos;
  52.  
  53. }


« Última modificación: 8 Diciembre 2014, 00:15 am por Eternal Idol » En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Nodos y punteros, ayuda C++
« Respuesta #1 en: 9 Diciembre 2014, 12:04 pm »

Código
  1. if(imagenes.prmLlegada == NULL){
  2. imagenes.prmLlegada = nuevo;
  3. }
  4. else{
  5. Nodo* i = imagenes.prmLlegada;
  6. Nodo* j = imagenes.prmVotos;
  7.  

supongo que si "imagenes.prmLlegada == NULL", entonces "imagenes.prmVotos" será igualmente NULL, no? No puedo saberlo a ciencia cierta porque no has puesto el código necesario para ello. Pero bueno, sigo a lo mío. El caso es que este segundo puntero no lo actualizas debidamente, sin embargo después, a la hora de insertar la segunda imagen, haces tranquilamente "Nodo* j = imagenes.prmVotos;" y manipulas ese puntero como si estuviese apuntando a un elemento válido.


En línea

freakfreckles

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Nodos y punteros, ayuda C++
« Respuesta #2 en: 10 Diciembre 2014, 17:14 pm »

Hola eferion muchas gracias por tu respuesta! Sí, lo que vos decis tiene sentido. Al ser el Nodo primero, si es null imagenes.prmLlegada y imagenes.prmVotos también son null.
Con tu comentario, arreglé la función agregarImagen y lo solucioné así:

Código
  1. void GaleriaImagenes::agregarImagen(const Imagen &imagen) {
  2.  
  3.    Nodo* nuevo = new Nodo;
  4.    nuevo -> elemento = imagen;
  5.    nuevo -> sigLlegada = NULL;
  6.    nuevo -> sigVotos = NULL;
  7.    nuevo -> votos = 0;
  8.  
  9.    if(imagenes.prmLlegada == NULL || imagenes.prmVotos == NULL){
  10.        imagenes.prmLlegada = nuevo;
  11.        imagenes.prmVotos== nuevo;
  12.    }
  13.    else{
  14.        Nodo* i = imagenes.prmLlegada;
  15.        Nodo* j = imagenes.prmVotos;
  16.  
  17.        while( i -> sigLlegada != NULL){
  18.            i = i -> sigLlegada;
  19.        }
  20.        i -> sigLlegada = nuevo;
  21.        while( j -> sigVotos != NULL){
  22.            j = j -> sigVotos;
  23.        }
  24.        j -> sigVotos = nuevo;
  25.    }
  26. }


Me sigue tirando segmentation Fault, pero al menos no en esa función. Muchas gracias,
Ahora me dice en la función Votar:

Código
  1. void GaleriaImagenes::votar(const Imagen &imagen) {
  2.    Nodo* i = imagenes.prmVotos;
  3.   while (!(i -> elemento == imagen)){
  4.        i = i -> sigVotos;
  5.        }
  6.    i-> votos = i -> votos + 1;
  7.   Nodo* k = i -> sigVotos;
  8.    while(k -> votos == i -> votos - 1){
  9.        k = k -> sigVotos;
  10.        }
  11.    Nodo* j = k;
  12.    k = i-> sigVotos;
  13.    i= j -> sigVotos;
  14.    }

Lo que hace el primer while es buscar la imagen, y cuando la encuentro sumarle un voto. Y después quiero intercambiar ese voto desordenado con el último voto de la lista que tenia el valor del voto antes de ser votado. Ya que no puedo usar swap por el tema de arreglar los punteros, lo hice manual. Pero me sigue dando segmentation fault. Alguna idea?

Muchas gracias!
« Última modificación: 10 Diciembre 2014, 17:17 pm por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[AYUDA] Punteros y Nodos!!!!
Programación C/C++
dixson 5 5,512 Último mensaje 25 Enero 2011, 00:47 am
por negux
arboles binarios ayuda con eliminacion de nodos
Programación C/C++
landerzx 2 3,126 Último mensaje 14 Noviembre 2011, 16:18 pm
por landerzx
Ayuda con nodos
Programación C/C++
robertoesimez 1 903 Último mensaje 6 Marzo 2017, 00:31 am
por integeroverflow
Nodos de una lista simple encadenada y dos punteros
Programación C/C++
MC.cover 4 1,699 Último mensaje 23 Abril 2018, 05:10 am
por MC.cover
Ayuda a encolar Nodos
Java
Ghio97 2 958 Último mensaje 20 Noviembre 2019, 02:43 am
por Ghio97
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines