problema con metodo de lista

Iniciado por karmi, 19 Noviembre 2010, 02:45 AM

0 Miembros y 1 Visitante están viendo este tema.

karmi

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 (cpp) [Seleccionar]

int negativos()

{
int z;
Nodo *recorrer;
recorrer = inicio;

if (recorrer!=NULL)
{
do
{
if(recorrer->dato < 0)
{
z=z+1;
recorrer = recorrer->sig;
}

else
recorrer = recorrer->sig;
}
while(recorrer->sig!=NULL);
if(recorrer->dato < 0)
z=z+1;
cout<<z;
}
else
{
cout << "lista vacia" << endl;
}
return z;

}


JuszR

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 (cpp) [Seleccionar]

recorrer > dato && dato < 0
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

Akai

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 (cpp) [Seleccionar]

int negativos(){
    int z=0;
    Nodo *recorrer;
    recorrer = inicio;
    if(recorrer==NULL)
        return -1 //si la lista esta vacia, devolvemos -1, por ejemplo. Esta linea y la superior se pueden omitir.
    while (recorrer){ //esto es lo mismo que recorrer!= NULL
        if(recorrer->dato < 0)
            z++;
        recorrer=recorrer->sig;
    }
    return z;
}