Guest User

Untitled

a guest
May 16th, 2018
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.21 KB | None | 0 0
  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
Add Comment
Please, Sign In to add comment