daily pastebin goal
17%
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
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top