Ayuda en lista C++ !!!

Iniciado por Necrø, 10 Octubre 2016, 18:46 PM

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

Necrø

Saludos!

Este es mi primer tema en este foro, bueno para ir al grano mi problema se trata de un while que se encuentra en la función mostrar de una lista, el problema con este es que no se cumplen las condiciones de su interior. Solo entra.  :-\

La idea de este programa es que muestre información de una caja dada un número de clientes, donde se muestra el tiempo y productos (Todos los datos son generados por el usuario). Dado estos datos se debe mostrar el mayor, menor de los productos y el promedio del tiempo, pero dado el problema con ese while (while(a != NULL)) no se muestra de forma correcta. Ya que muestra el mayor y menor como iguales y en el promedio muestra otro valor.

Adjunto mi código:

Código (cpp) [Seleccionar]
/*
Plataforma: Dev-C++
*/

#include <iostream>
#include <stdlib.h>
using namespace std;

struct nodo
{
    int clientes;
    int tiempo;
    int productos;
    nodo *sig;
};

class lista
{
private:
nodo *aux;   //Cabeza

public:
lista();  // Constructor
~lista(); //Destructor
void ingreso(int i);
void mostrarC();
void mostrar(int n);
};

lista::lista()
{
aux=NULL;
}

lista::~lista()
{
nodo *q;
while (aux)
{
q=aux;
aux=aux->sig;
delete q;
}
}

void lista::ingreso(int i)
{
     aux = new (nodo);
     aux->clientes=i;
     cout<<"Datos extras :"<<endl;
     cout<<"Tiempo: "<<endl;
cin>>aux->tiempo;
cout<<"Productos: "<<endl;
cin>>aux->productos;
system("cls");
}

void lista::mostrarC() //Muestra cantidad de clientes
{
nodo *b;
b=aux;
    while(b != NULL)
    {
cout <<" "<<b->clientes << endl;
        b = b->sig;
    }

}

void lista::mostrar(int n) //Muestra datos extras: Tiempo y Productos
{
nodo *a;
a=aux;
int prom=0, menor, mayor;

        cout<<"Informacion Caja: "<<endl;
cout<<endl;

        while (a != NULL)
{
if(mayor<(a->productos)) //Busca el mayor
mayor=a->productos;

if(menor>(a->productos)) //Busca el menor
menor=a->productos;

prom+=a->tiempo; //Suma los tiempos para el promedio
a=a->sig;
    }
    cout<<"Mayor: "<<mayor<<" productos."<<endl;
    cout<<endl;
    cout<<"Menor: "<<menor<<" productos."<<endl;
    cout<<endl;
    cout<<"Promedio del tiempo (aprox): "<<prom/n<<" min."<<endl; //Muestra y calcula el promedio
}

int main ()
{
lista C;
int n;
cout<<"Numero de Clientes?: "; //Pide cuantos clientes quieres en tu lista
cin>>n;
    if(n==0)
    {
    cout<<"\n"<<"Lista Vacia"<<endl;
}
else
{
    for(int i=1;i<=n;i++)
{
        C.ingreso(i);
    }
    cout<<"Cantidad de Clientes: ";
    C.mostrarC();
    cout<<endl;
    C.mostrar(n);
}
    return 0;
}


Espero que me puedan ayudar y de antemano gracias  :rolleyes:

MAFUS

El método ingreso no está bien. Cada vez que lo llames machacarás la raíz de la lista.