Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Necrø en 10 Octubre 2016, 18:46 pm



Título: Ayuda en lista C++ !!!
Publicado por: Necrø en 10 Octubre 2016, 18:46 pm
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
  1. /*
  2. Plataforma: Dev-C++
  3. */
  4.  
  5. #include <iostream>
  6. #include <stdlib.h>
  7. using namespace std;
  8.  
  9. struct nodo
  10. {
  11.    int clientes;
  12.    int tiempo;
  13.    int productos;
  14.    nodo *sig;
  15. };
  16.  
  17. class lista
  18. {
  19. private:
  20. nodo *aux;   //Cabeza
  21.  
  22. public:
  23. lista();   // Constructor
  24. ~lista(); //Destructor
  25. void ingreso(int i);
  26. void mostrarC();
  27. void mostrar(int n);
  28. };
  29.  
  30. lista::lista()
  31. {
  32. aux=NULL;
  33. }
  34.  
  35. lista::~lista()
  36. {
  37. nodo *q;
  38. while (aux)
  39. {
  40. q=aux;
  41. aux=aux->sig;
  42. delete q;
  43. }
  44. }
  45.  
  46. void lista::ingreso(int i)
  47. {
  48.     aux = new (nodo);
  49.     aux->clientes=i;
  50.     cout<<"Datos extras :"<<endl;
  51.     cout<<"Tiempo: "<<endl;
  52. cin>>aux->tiempo;
  53. cout<<"Productos: "<<endl;
  54. cin>>aux->productos;
  55. system("cls");
  56. }
  57.  
  58. void lista::mostrarC() //Muestra cantidad de clientes
  59. {
  60. nodo *b;
  61. b=aux;
  62.    while(b != NULL)
  63.    {
  64. cout <<" "<<b->clientes << endl;
  65.        b = b->sig;
  66.    }
  67.  
  68. }
  69.  
  70. void lista::mostrar(int n) //Muestra datos extras: Tiempo y Productos
  71. {
  72. nodo *a;
  73. a=aux;
  74. int prom=0, menor, mayor;
  75.  
  76.        cout<<"Informacion Caja: "<<endl;
  77. cout<<endl;
  78.  
  79.        while (a != NULL)
  80. {
  81. if(mayor<(a->productos)) //Busca el mayor
  82. mayor=a->productos;
  83.  
  84. if(menor>(a->productos)) //Busca el menor
  85. menor=a->productos;
  86.  
  87. prom+=a->tiempo; //Suma los tiempos para el promedio
  88. a=a->sig;
  89.    }
  90.    cout<<"Mayor: "<<mayor<<" productos."<<endl;
  91.    cout<<endl;
  92.    cout<<"Menor: "<<menor<<" productos."<<endl;
  93.    cout<<endl;
  94.    cout<<"Promedio del tiempo (aprox): "<<prom/n<<" min."<<endl; //Muestra y calcula el promedio
  95. }
  96.  
  97. int main ()
  98. {
  99. lista C;
  100. int n;
  101. cout<<"Numero de Clientes?: "; //Pide cuantos clientes quieres en tu lista
  102. cin>>n;
  103.    if(n==0)
  104.    {
  105.     cout<<"\n"<<"Lista Vacia"<<endl;
  106. }
  107. else
  108. {
  109.    for(int i=1;i<=n;i++)
  110. {
  111.        C.ingreso(i);
  112.    }
  113.    cout<<"Cantidad de Clientes: ";
  114.    C.mostrarC();
  115.    cout<<endl;
  116.    C.mostrar(n);
  117. }
  118.   return 0;
  119. }

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


Título: Re: Ayuda en lista C++ !!!
Publicado por: MAFUS en 10 Octubre 2016, 20:09 pm
El método ingreso no está bien. Cada vez que lo llames machacarás la raíz de la lista.