Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.79 KB | None | 0 0
  1. #include "Lista.h"
  2. #define MAX 100
  3.  
  4. typedef struct paciente{
  5.   int codigo;
  6.   int gravedad;
  7. }Paciente;
  8.  
  9. class Hospital{
  10. public:
  11.   Hospital();
  12.   void ingreso(Paciente& p const);
  13.   void alta(Paciente& p const);
  14.   void muerte(Paciente& p const);
  15.   int nPacientesUCI() const;
  16.   int nPacientesPlanta() const;
  17.   int nPacientesGrav(int g) const;
  18.   ~Hospital();
  19.  
  20. private:
  21.   Lista<Paciente> UCI;
  22.   Lista<Paciente> Planta;
  23.   Lista<Paciente> aux;
  24.   int pacientesPlanta;
  25.   int pacientesUCI;
  26. };
  27.  
  28. Hospital::Hospital(){
  29.     pacientesPlanta = 0;
  30.     pacientesUCI = 0;
  31. }
  32.  
  33. //precondicion: la gravedad del paciente ha de estar comprendida entre 0 y 9
  34. void Hospital::ingreso(Paciente& p const){
  35.   int gravedadMin = 0, idaux;
  36.   Paciente auxP, menos_grave;
  37.   //acceso a planta
  38.   if(p.gravedad > 5){
  39.     if(nPacientesPlanta() < MAX){
  40.       Planta.push(p);
  41.       pacientesPlanta++;
  42.     }
  43.     else{
  44.       while(!Planta.vacia()){
  45.         auxP = Planta.tope();
  46.         Planta.pop();
  47.         aux.push(auxP);
  48.         if(auxP.gravedad > gravedadMin){
  49.           gravedadMin = auxP.gravedad;
  50.           idaux = auxP.codigo;
  51.         }
  52.       }
  53.       while(!aux.vacia()){
  54.         auxP = aux.tope();
  55.         if(auxP.codigo == idaux)
  56.           menos_grave = auxP;
  57.         Planta.push(auxP);
  58.         aux.pop();
  59.       }
  60.       alta(menos_grave);
  61.     }
  62.   }
  63.  
  64.   //muerto
  65.   else if(p.gravedad == 0)
  66.     muerte(p);
  67.  
  68.   //acceso a UCI
  69.   else{
  70.     if(nPacientesUCI() < MAX){
  71.       UCI.push(p);
  72.       pacientesUCI++;
  73.     }
  74.  
  75.     else{
  76.       while(!UCI.vacia()){
  77.         auxP = UCI.tope();
  78.         UCI.pop();
  79.         aux.push(auxP);
  80.         if(auxP.gravedad > gravedadMin){
  81.           gravedadMin = auxP.gravedad;
  82.           idaux = auxP.codigo;
  83.         }
  84.       }
  85.       while(!aux.vacia()){
  86.         auxP = aux.tope();
  87.         if(auxP.codigo == idaux)
  88.           menos_grave = auxP;
  89.         else if(auxP.codigo != idaux)
  90.           UCI.push(auxP);
  91.         aux.pop();
  92.       }
  93.       menos_grave.gravedad = 6;
  94.       ingreso(menos_grave);
  95.     }
  96.   }
  97. }
  98.  
  99. inline int Hospital::nPacientesUCI() const{return pacientesUCI;}
  100. inline int Hospital::nPacientesPlanta() const{return pacientesPlanta;}
  101. int Hospital::nPacientesGrav(int g) const{
  102.   int cont = 0;
  103.   Paciente auxP;
  104.  
  105.   while(!Planta.vacia()){
  106.     auxP = Planta.tope();
  107.     if(auxP.gravedad == g)
  108.       cont++;
  109.     Planta.pop();
  110.     aux.push(auxP);
  111.   }
  112.   while(!aux.vacia()){
  113.     auxP = aux.tope();
  114.     aux.pop();
  115.     Planta.push(auxP);
  116.   }
  117.  
  118.   while(!UCI.vacia()){
  119.     auxP = UCI.tope();
  120.     if(auxP.gravedad == g)
  121.       cont++;
  122.     UCI.pop();
  123.     aux.push(auxP);
  124.   }
  125.   while(!aux.vacia()){
  126.     auxP = aux.tope();
  127.     aux.pop();
  128.     UCI.push(auxP);
  129.   }
  130.  
  131.   return cont;
  132. }
  133.  
  134. Hospital::~Hospital(){
  135.   ~UCI();
  136.   ~Planta();
  137.   ~aux();
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement