daily pastebin goal
48%
SHARE
TWEET

Untitled

a guest May 16th, 2018 84 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifndef __CHUSTECZKA_H__
  2. #define __CHUSTECZKA_H__
  3.  
  4. #include "Osoba.h"
  5. #include "iostream"
  6. using namespace std;
  7.  
  8. struct czlowiek
  9. {
  10.     struct Osoba* plec;
  11.     bool czyma;
  12.     struct czlowiek* prawo;
  13.     struct czlowiek* lewo;
  14.     unsigned int identyfikator;
  15. };
  16.  
  17. class Chusteczka
  18. {
  19. public:
  20.     Chusteczka();
  21.     ~Chusteczka();
  22.     unsigned int dolacz(Osoba* osoba);
  23.     unsigned int dolacz(Osoba* osoba, unsigned int odwlodka);
  24.     bool rozpocznij();
  25.     bool zakoncz();
  26.     bool zrezygnuj(Osoba* osoba);
  27.     bool zrezygnuj(unsigned int osoba);
  28.     bool przekaz(Osoba* osoba);
  29.     bool przekaz(unsigned int osoba);
  30.     void uczestnicy();
  31.     void uczestnicy(Osoba::Plec p);
  32.     unsigned int ilosc();
  33.     void statystyka();
  34.  
  35. private:
  36.     struct czlowiek* wlodzirej;
  37.     struct czlowiek* ktoma;
  38.     struct czlowiek* pierwszy;
  39.     struct czlowiek* ostatni;
  40.     unsigned int ileosob;
  41.     unsigned int ostatniid;
  42.     bool czyrozpoczeta;
  43.     char plec(Osoba::Plec p);
  44.  
  45. };
  46.  
  47. Chusteczka::Chusteczka()
  48. {
  49.     wlodzirej = new struct czlowiek;
  50.     wlodzirej->plec = new Osoba(Osoba::K);
  51.     wlodzirej->prawo = wlodzirej;
  52.     wlodzirej->lewo = wlodzirej;
  53.     wlodzirej->czyma = 1;
  54.     wlodzirej->identyfikator = 0;
  55.  
  56.     ostatniid = 0;
  57.     ktoma = wlodzirej;
  58.     pierwszy = wlodzirej;
  59.     ostatni = wlodzirej;
  60.     czyrozpoczeta = 0;
  61.     ileosob=0;
  62. }
  63.  
  64. Chusteczka::~Chusteczka()
  65. {
  66.  
  67. }
  68.  
  69.  
  70. unsigned int Chusteczka::dolacz(Osoba* osoba)
  71. {
  72.     struct czlowiek* wsk=pierwszy->prawo;
  73.     if(osoba==0)
  74.         return 0;
  75.  
  76.     for(;wsk!=wlodzirej;wsk=wsk->prawo)
  77.     {
  78.             if(osoba==wsk->plec)
  79.                     return 0;
  80.     }
  81.    
  82.     wsk = new struct czlowiek;
  83.     ostatni->prawo = wsk;      
  84.     wsk->lewo=ostatni;
  85.     wsk->prawo=wlodzirej;
  86.     wlodzirej->lewo=wsk;
  87.     wsk->identyfikator=++ostatniid;
  88.     wsk->czyma = 0;
  89.     wsk->plec = osoba;
  90.  
  91.     ileosob++;
  92.     ostatni = wsk;
  93.     return wsk->identyfikator;
  94. }
  95.  
  96. unsigned int Chusteczka::dolacz(Osoba* osoba, unsigned int odwlodka)
  97. {
  98.     if(odwlodka<=ileosob)
  99.     {
  100.     struct czlowiek* wsk=pierwszy->prawo;
  101.     if(osoba==0)
  102.         return 0;
  103.  
  104.         for(;wsk!=wlodzirej;wsk=wsk->prawo)
  105.         {
  106.             if(osoba==wsk->plec)
  107.                     return 0;
  108.         }
  109.  
  110.     wsk=pierwszy;
  111.     unsigned int iodwlodka = 0;
  112.     if(wsk->prawo!=0)
  113.         while(iodwlodka!=odwlodka)
  114.         {
  115.             iodwlodka++;
  116.             wsk=wsk->prawo;
  117.         }
  118.    
  119.     struct czlowiek* temp = wsk;
  120.     wsk = new struct czlowiek;
  121.     wsk->prawo = temp->prawo;
  122.     temp->prawo = wsk;
  123.     wsk->lewo = temp;
  124.     temp = wsk->prawo;
  125.     temp->lewo = wsk;
  126.  
  127.     wsk->identyfikator=++ostatniid;
  128.     wsk->czyma = 0;
  129.     wsk->plec = osoba;
  130.     ileosob++;
  131.  
  132.     return wsk->identyfikator;         
  133.  
  134.     }
  135.     return 0;
  136. }
  137.  
  138. bool Chusteczka::rozpocznij()
  139. {
  140.     if(czyrozpoczeta==1)
  141.         return 0;
  142.     if(ileosob==0)
  143.         return 0;
  144.    
  145.     ktoma = wlodzirej;
  146.     czyrozpoczeta = 1;
  147.     return 1;
  148. }
  149.  
  150.  
  151. bool Chusteczka::zakoncz()
  152. {
  153.     if(czyrozpoczeta==0)
  154.         return 0;
  155.    
  156.     ktoma->czyma=0;
  157.     ktoma = wlodzirej;
  158.     wlodzirej->czyma=1;
  159.  
  160.     czyrozpoczeta = 0;
  161.     return 1;
  162. }
  163.  
  164. bool Chusteczka::zrezygnuj(Osoba* osoba)
  165. {
  166.     struct czlowiek* wsk=pierwszy;
  167.     if(osoba==0)
  168.         return 0;
  169.  
  170.     if(wsk->prawo!=0)
  171.         while(wsk!=wlodzirej)
  172.         {
  173.             if(osoba==wsk->plec)
  174.             {
  175.                 if(wsk->czyma==1)
  176.                     return 0;
  177.                
  178.                 struct czlowiek *temp;
  179.                 temp = wsk->prawo;
  180.                 temp->lewo = wsk->lewo;
  181.                 temp = wsk->lewo;
  182.                 temp->prawo = wsk->prawo;
  183.                 ileosob--;
  184.                 delete wsk;
  185.                 return 1;
  186.             }
  187.             wsk=wsk->prawo;
  188.         }
  189.    
  190.     return 0;
  191. }
  192.  
  193. bool Chusteczka::zrezygnuj(unsigned int osoba)
  194. {
  195.     if(osoba == 0)
  196.         return 0;
  197.    
  198.     struct czlowiek *wsk=pierwszy;
  199.     for(;wsk!=ostatni;wsk=wsk->prawo)
  200.     {
  201.         if(osoba==wsk->identyfikator)
  202.         {
  203.             if(wsk->czyma==1)
  204.                 return 0;
  205.            
  206.             struct czlowiek *temp;
  207.             temp = wsk->prawo;
  208.             temp->lewo = wsk->lewo;
  209.             temp = wsk->lewo;
  210.             temp->prawo = wsk->prawo;
  211.             ileosob--;
  212.             delete wsk;
  213.             return 1;
  214.         }
  215.     }  
  216.    
  217.     return 0;
  218. }
  219.  
  220. bool Chusteczka::przekaz(Osoba* osoba)
  221. {
  222.     if(czyrozpoczeta==0)
  223.         return 0;
  224.    
  225.     struct czlowiek *wsk=pierwszy->prawo;
  226.     for(;wsk!=wlodzirej;wsk=wsk->prawo)
  227.     {
  228.         if(osoba==wsk->plec)
  229.             if(wsk->plec->plec==osoba->plec)
  230.             {
  231.                 if(ktoma!=wlodzirej)
  232.                 {  
  233.                     return 0;
  234.                 }
  235.                 else
  236.                 {
  237.                     wsk->czyma = 1;
  238.                     ktoma->czyma = 0;
  239.                     ktoma = wsk;
  240.                     return 1;
  241.                 }
  242.             }
  243.             else
  244.             {
  245.                 wsk->czyma = 1;
  246.                 ktoma->czyma = 0;
  247.                 ktoma = wsk;
  248.                 return 1;
  249.             }
  250.                
  251.     }  
  252.    
  253.     return 0;
  254. }
  255.  
  256. bool Chusteczka::przekaz(unsigned int osoba)
  257. {
  258.     struct czlowiek *wsk=wlodzirej->prawo;
  259.     if(czyrozpoczeta==0)
  260.         return 0;
  261.  
  262.     if(osoba == 0)
  263.         return 0;
  264.    
  265.     for(;wsk!=wlodzirej;wsk=wsk->prawo)
  266.     {
  267.         if(osoba==wsk->identyfikator)
  268.             if(wsk->plec->plec==ktoma->plec->plec)
  269.             {
  270.                 if(ktoma!=wlodzirej)
  271.                 {
  272.                     return 0;
  273.                 }
  274.                 else
  275.                 {
  276.                     wsk->czyma = 1;
  277.                     ktoma->czyma = 0;
  278.                     ktoma = wsk;
  279.                     return 1;
  280.                 }
  281.             }
  282.             else
  283.             {
  284.                 wsk->czyma = 1;
  285.                 ktoma->czyma = 0;
  286.                 ktoma = wsk;
  287.                 return 1;
  288.             }
  289.     }  
  290.    
  291.     return 0;
  292. }
  293.  
  294.  
  295. char Chusteczka::plec(Osoba::Plec p)
  296. {
  297.     if(p==0)
  298.         return 'K';
  299.     else
  300.         return 'M';
  301. }
  302.  
  303. void Chusteczka::uczestnicy()
  304. {
  305.     struct czlowiek* wsk = wlodzirej->lewo;
  306.     while(wsk->lewo!=wlodzirej)
  307.     {
  308.         std::cout << "plec: " << wsk->plec->plec;
  309.         std::cout << ", nr: " << wsk->identyfikator << std::endl;
  310.         wsk=wsk->lewo;
  311.     }
  312.     std::cout << "plec: " << wsk->plec->plec;
  313.     std::cout << ", nr: " << wsk->identyfikator << std::endl;
  314. }
  315.  
  316. void Chusteczka::uczestnicy(Osoba::Plec p)
  317. {
  318.     struct czlowiek* wsk = wlodzirej->lewo;
  319.     while(wsk->lewo!=wlodzirej)
  320.     {
  321.         if(wsk->plec->plec==p)
  322.             std::cout << "nr: " << wsk->identyfikator << std::endl;
  323.         wsk=wsk->lewo;
  324.     }
  325.     if(wsk->plec->plec==p)
  326.         std::cout << "nr: " << wsk->identyfikator << std::endl;
  327. }
  328.  
  329. unsigned int Chusteczka::ilosc()
  330. {
  331.     return ileosob;
  332. }
  333.  
  334. void Chusteczka::statystyka()
  335. {
  336.     cout << "Ile: " << ileosob << endl;
  337.     cout << "Ktoma: " << ktoma->identyfikator << endl;
  338.  
  339.  
  340.     struct czlowiek *wsk=pierwszy;
  341.         cout << "i h l p P\n";
  342.         cout << wsk->identyfikator << " ";
  343.         cout << wsk->czyma << " ";
  344.         cout << (wsk->lewo)->identyfikator << " ";
  345.         cout << (wsk->prawo)->identyfikator << " ";
  346.         cout << plec(wsk->plec->plec)<< endl;
  347.     wsk=pierwszy->prawo;
  348.     for(;wsk!=wlodzirej;wsk=wsk->prawo)
  349.     {
  350.  
  351.         cout << wsk->identyfikator << " ";
  352.         cout << wsk->czyma << " ";
  353.         cout << (wsk->lewo)->identyfikator << " ";
  354.         cout << (wsk->prawo)->identyfikator << " ";
  355.         cout << plec(wsk->plec->plec)<< endl;
  356.     }
  357. }
  358.  
  359.  
  360. #endif
RAW Paste Data
Top