Advertisement
Guest User

Ejercicio

a guest
May 27th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.15 KB | None | 0 0
  1. PAQUETE.HPP
  2.  
  3. #ifndef PAQUETE_HPP_INCLUDED
  4. #define PAQUETE_HPP_INCLUDED
  5. #include <iostream>
  6.  
  7.  
  8.  
  9. enum Excepcion {ERROR_EN_PAQUETE,LISTA_VACIA};
  10.  
  11.  
  12.  
  13.     class Paquete{
  14.     public:
  15.  
  16.         Paquete(const std::string& ide, const unsigned ordi, const std::string& cont);
  17.         Paquete(const Paquete& p);
  18.         std::string get_id() const;
  19.         unsigned get_ord() const;
  20.         std::string get_contenido() const;
  21.         std::string str() const;
  22.         friend bool operator < (const Paquete& p, const Paquete& q);
  23.  
  24.     private:
  25.  
  26.         std::string id;
  27.         unsigned ord;
  28.         std::string contenido;
  29.  
  30.             };
  31.  
  32.  
  33.  
  34. #endif // PAQUETE_HPP_INCLUDED
  35.  
  36. PAQUETE.CPP
  37.  
  38. #include <sstream>
  39. #include "Paquete.hpp"
  40.  
  41.  
  42.  
  43. using namespace std;
  44.  
  45.     Paquete::Paquete(const string& ide, const unsigned ordi, const string& cont){
  46.         if (ide == "" or ordi < 0) throw ERROR_EN_PAQUETE;
  47.         id = ide;
  48.         ord = ordi;
  49.         contenido = cont;
  50.         }
  51.  
  52.     Paquete::Paquete(const Paquete& p){
  53.         id = p.id;
  54.         ord = p.ord;
  55.         contenido = p.contenido;
  56.         }
  57.  
  58.     string Paquete::get_id() const{
  59.         return id;
  60.         }
  61.  
  62.     unsigned Paquete::get_ord() const{
  63.             return ord;
  64.         }
  65.  
  66.     string Paquete::get_contenido() const{
  67.         return contenido;
  68.         }
  69.  
  70.     string Paquete::str() const{
  71.         ostringstream os;
  72.         os << id << " " << ord << " " << contenido;
  73.         return os.str();
  74.         }
  75.  
  76.      bool operator < (const Paquete& p, const Paquete& q){
  77.         return p.ord < q.ord;
  78.         }
  79.  
  80. LISTAPAQUETE.HPP
  81.  
  82. #define LISTAPAQUETE_HPP_INCLUDED
  83. #include "Paquete.hpp"
  84. #include <iostream>
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.     class ListaPaquetes{
  92.         public:
  93.  
  94.             ListaPaquetes();
  95.             ListaPaquetes(const ListaPaquetes& lp);
  96.  
  97. LISTAPAQUETE.CPP
  98.  
  99. #include "ListaPaquete.hpp"
  100. #include <sstream>
  101.  
  102. using namespace std;
  103.  
  104.             ListaPaquetes::ListaPaquetes():n_pack(0), _primero(NULL), _ultimo(NULL) //INICIALIZA LOS PUNTEROS, SIEMPRE A NULL, NO HAY NADA
  105.             {}
  106.  
  107.  
  108.             ListaPaquetes::ListaPaquetes(const ListaPaquetes& lp): n_pack(0), _primero(NULL), _ultimo(NULL){
  109.  
  110.                 if (lp.n_pack > 0){
  111.                     Nodo *ptr = lp._primero;// NODO EMPIEZA EN PRIMERO, DE lp, QUE ES EL QUE LE PASAMOS
  112.                     while(ptr != NULL){         //Terminara cuando prt != NULL
  113.                         add_pack(*(ptr->ppack));
  114.                         ptr = ptr->sig;
  115.             }
  116.         }
  117.     }
  118.  
  119.  
  120.             ListaPaquetes::~ListaPaquetes(){
  121.                 if (n_pack > 0){
  122.                     Nodo *ptr = _primero;
  123.                     while(ptr != NULL){
  124.                         _primero = _primero->sig; //Primero me cargo el packete y luego me cargo el puntero. avanzo el puntero.
  125.                         delete (ptr->ppack);
  126.                         delete ptr;
  127.                         ptr = _primero;
  128.                     }
  129.             }
  130.         }
  131.             void ListaPaquetes::clear(){
  132.                 if (n_pack > 0){
  133.                     Nodo *ptr = _primero;
  134.                     while(ptr != NULL){
  135.                         _primero = _primero->sig; //Primero me cargo el packete y luego me cargo el puntero. avanzo el puntero.
  136.                         delete (ptr->ppack);
  137.                         delete ptr;
  138.                         ptr = _primero;
  139.                     }
  140.                     _primero = (NULL); //LIMPIO LA ESTRUCTURA.
  141.                     _ultimo = _primero;
  142.                     n_pack = 0;
  143.             }
  144. }
  145.             bool ListaPaquetes::esta_vacia() const{
  146.                 if (n_pack == 0) throw LISTA_VACIA;
  147.                 return n_pack == 0;
  148.                 }
  149.  
  150.             string ListaPaquetes::primer_id(){
  151.                 return _primero->ppack->get_id();
  152.  
  153.             }
  154.  
  155.  
  156.             void ListaPaquetes::add_pack(const Paquete& pq){
  157.                 Nodo *ptr = new Nodo;
  158.                 ptr->sig = NULL;
  159.                 ptr->ppack = new Paquete(pq);
  160.  
  161.                 if (n_pack == 0) { //Comprobamos si el estado de la trasmsion esta por inicializar, caso NULL
  162.  
  163.                     _primero = ptr;
  164.                 }else{
  165.                     _ultimo->sig = ptr;
  166.             }
  167.                     _ultimo = ptr;
  168.                     ++ n_pack;
  169.         }
  170.  
  171.  
  172.  
  173.  
  174.  
  175.         string ListaPaquetes::recuperar_mensaje(const string& id){
  176.             ListaPaquetes ListaAuxiliar;
  177.             Nodo *actual = _primero;
  178.             Nodo *anterior = NULL;
  179.  
  180.             while(actual != NULL){
  181.                 if(actual->ppack->get_id() == id){
  182.                    ListaAuxiliar.insert_pack(actual);
  183.            /*VERIFICAR SI ES _primero y colocar _primero adecuadamente*/
  184.                     if(actual == _primero){
  185.                         _primero = _primero->sig;
  186.             }
  187.             /*AJUSTAR PUNTEROS DEL ANTERIOR AL BORRADO*/
  188.                     else if (actual != _primero or actual != _ultimo){
  189.                         anterior->sig = actual->sig;
  190.             }
  191.            /*VERIFICAR SI ES _ultimo y colocar _ultimo adecuadamente*/
  192.                     else if(actual == _ultimo){
  193.                         anterior->sig = actual->sig;
  194.                         _ultimo = anterior;
  195.             }
  196.  
  197.  
  198.             --n_pack;
  199.         }
  200.             anterior = actual;
  201.             actual = actual->sig;
  202.     }
  203.             actual = ListaAuxiliar._primero;
  204.             ostringstream os;
  205.  
  206.             while (actual != NULL){
  207.                 os << actual->ppack->get_contenido();
  208.                 actual = actual->sig;
  209.  
  210.                 }
  211.                 return os.str();
  212.  
  213.   }
  214.  
  215.  string ListaPaquetes::str() const{
  216.     Nodo *actual = _primero;
  217.     ostringstream os;
  218.  
  219.     while (actual != NULL) {
  220.         os << actual->ppack->get_id() << " " << actual->ppack->get_ord() << " " <<  actual->ppack->get_contenido() << endl;
  221.         actual = actual->sig;
  222.  
  223.         }
  224.  
  225.         return os.str();
  226.  }
  227. //AUX
  228.  
  229. void ListaPaquetes::insert_pack(Nodo *ppq){
  230.  
  231.  
  232.     Nodo *aux;
  233.  
  234.     //Creacion
  235.     if (_primero == NULL){
  236.             _primero = ppq;
  237.             aux = ppq;
  238.             ppq->sig = NULL;
  239.             _ultimo = ppq;
  240.  
  241.     }else{
  242.         //Nuevo nodo menor al _primero
  243.         if  (_primero->ppack->get_ord() > (ppq->ppack->get_ord())) {
  244.                 ppq->sig = _primero;
  245.                 _primero = ppq;
  246.  
  247.         }else{
  248.             //Insercción normal.
  249.             aux = _primero;
  250.             //Búsqueda
  251.             while(aux->sig!= NULL and (aux->sig->ppack->get_ord()) < (ppq->ppack->get_ord())) {
  252.                 aux = aux->sig;
  253.             }
  254.             ppq->sig = aux->sig;
  255.             aux->sig = ppq;
  256.  
  257.             if(ppq->sig == NULL){
  258.                 _ultimo = ppq;
  259.             }
  260.         }
  261.       }
  262.     ++n_pack;
  263.     }
  264.  
  265. RECEPTOR.HPP
  266.  
  267. #include "ListaPaquete.hpp"
  268. #include <vector>
  269.  
  270.  //NO QUEREMOS STD
  271.  
  272.  
  273. class Receptor{
  274.     public:
  275.  
  276.  
  277.         Receptor();
  278.         Receptor(const Receptor& rc);
  279.         ~Receptor();
  280.         void clear();
  281.         void add_pack(const Paquete& pq);
  282.         std::string extraer_msgs();
  283.         std::string str() const;
  284.  
  285.     private:
  286.  
  287.         ListaPaquetes transmisiones;
  288.         std::vector<std::string> msgs_recibidos;
  289.  
  290.  
  291. };
  292.  
  293. #endif // RECEPTOR_HPP_INCLUDED
  294.  
  295. RECEPTOR.CPP
  296.  
  297. #include "Receptor.hpp"
  298. #include <iostream>
  299.  
  300. using namespace std;
  301.  
  302.         Receptor::Receptor(){}
  303.  
  304.  
  305.         Receptor::Receptor(const Receptor& rc){}
  306.  
  307.  
  308.         Receptor::~Receptor(){}
  309.  
  310.  
  311.         void Receptor::clear(){}
  312.  
  313.  
  314.         void Receptor::add_pack(const Paquete& pq){}
  315.  
  316.  
  317.         string Receptor::extraer_msgs(){}
  318.  
  319.  
  320.         string Receptor::str() const{}
  321.  
  322. MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN MAIN
  323.  
  324. #include "ListaPaquete.hpp"
  325. #include "Paquete.hpp"
  326. #include "Receptor.cpp"
  327.  
  328. using namespace std;
  329.  
  330. int main()
  331. {
  332.     Paquete p1("id1", 1, "Esto ");
  333.     Paquete p2("id1", 2, "es ");
  334.     Paquete p3("id1", 3, "una prueba");
  335.  
  336.     Paquete q1("id2", 1, "Estamos ");
  337.     Paquete q2("id2", 2, "a la ");
  338.     Paquete q3("id2", 3, "espera");
  339.  
  340.     cout << "Se reciben paquetes ..................." << endl;
  341.     Receptor tr;
  342.     tr.add_pack(p1);
  343.     tr.add_pack(q2);
  344.     tr.add_pack(p3);
  345.     tr.add_pack(q1);
  346.     tr.add_pack(p2);
  347.     tr.add_pack(q3);
  348.     cout << endl;
  349.  
  350.     cout << "Estado del receptor ..................." << endl;
  351.     cout << tr.str() << endl << endl ;
  352.  
  353.     cout << "Se extraen los mensajes del receptor..." << endl;
  354.     tr.extraer_msgs();
  355.     cout << endl;
  356.  
  357.     cout << "Estado del receptor ..................." << endl;
  358.     cout << tr.str() << endl;
  359.  
  360.     return 0;
  361. }
  362.  
  363.  
  364.             ~ListaPaquetes();
  365.             void clear();
  366.             bool esta_vacia() const;
  367.             std::string primer_id();
  368.             void add_pack(const Paquete& pq);
  369.             std::string recuperar_mensaje(const std::string& id);
  370.             std::string str() const;
  371.  
  372.  
  373.         private:
  374.  
  375.             struct Nodo{
  376.             Paquete * ppack;
  377.             Nodo * sig;
  378.         };
  379.  
  380.         unsigned n_pack;
  381.         Nodo *_primero, *_ultimo;
  382.         void insert_pack(Nodo *ppq);
  383.  
  384.         };
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391. #endif // LISTAPAQUETE_HPP_INCLUDED
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement