Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: karmi en 19 Noviembre 2010, 02:45 am



Título: problema con metodo de lista
Publicado por: karmi en 19 Noviembre 2010, 02:45 am
hola tengo un problema, lo que pasa es que hice una lista en visual c++, el punto es que quiero contar cuales son los numeros negativos, el programa me corre, pero no me dice cuantos son negativos, espero me ayuden, le pongo el metodo aver si estoy bien...

Código
  1. int negativos()
  2.  
  3. {
  4. int z;
  5. Nodo *recorrer;
  6. recorrer = inicio;
  7.  
  8. if (recorrer!=NULL)
  9. {
  10. do
  11. {
  12. if(recorrer->dato < 0)
  13. {
  14. z=z+1;
  15. recorrer = recorrer->sig;
  16. }
  17.  
  18. else
  19. recorrer = recorrer->sig;
  20. }
  21. while(recorrer->sig!=NULL);
  22. if(recorrer->dato < 0)
  23. z=z+1;
  24. cout<<z;
  25. }
  26. else
  27. {
  28. cout << "lista vacia" << endl;
  29. }
  30. return z;
  31.  
  32. }


Título: Re: problema con metodo de lista
Publicado por: JuszR en 19 Noviembre 2010, 13:12 pm
Ok, antes que nada trata de poner el código en color (submenú GeSHi, acá arriba). :)

No se si usas clases (si usas, no tengo idea de POO), pero ¿qué intentas hacer con "recorrer->dato < 0" ?

Intenta:
Código
  1. recorrer > dato && dato < 0


Título: Re: problema con metodo de lista
Publicado por: Akai en 19 Noviembre 2010, 14:31 pm
Juszr, "recorrer" es el típico puntero auxiliar a un nodo de la lista para recorrerla.

Karmi, tu código queda un tanto confuso de leer, y no estoy del todo seguro que realice su función. El código podría simplificarse, debido a que con tantas condiciones anidadas, algunas de ellas refiriéndose a lo mismo, es difícil hacer una traza.

Por otro lado, en caso de que tu lista esté vacía, z se devuelve sin inicializar --> mal asunto.

Te propongo el siguiente código:

Código
  1. int negativos(){
  2.    int z=0;
  3.    Nodo *recorrer;
  4.    recorrer = inicio;
  5.    if(recorrer==NULL)
  6.        return -1 //si la lista esta vacia, devolvemos -1, por ejemplo. Esta linea y la superior se pueden omitir.
  7.    while (recorrer){ //esto es lo mismo que recorrer!= NULL
  8.        if(recorrer->dato < 0)
  9.            z++;
  10.        recorrer=recorrer->sig;
  11.    }
  12.    return z;
  13. }
  14.