Advertisement
kanciastopantalones

Untitled

Jan 16th, 2014
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.21 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. class platnosc {
  4. private:
  5. char * nazwa;
  6. double kwota;
  7. int dzien;
  8. int miesiac;
  9. int rok;
  10. public:
  11. platnosc(char * nazwa, double kwota, int dzien, int miesiac, int rok) : nazwa(nazwa), kwota(kwota), dzien(dzien), miesiac(miesiac), rok(rok){}
  12. ~platnosc(){
  13. delete[] nazwa;
  14. }
  15. //operator mniejszości potrzebny do sortowania platności w ostatniej kolejce
  16. bool operator< (const platnosc & plat) const{
  17. if (rok < plat.rok) return true;
  18. if (rok > plat.rok) return false;
  19. if (miesiac < plat.miesiac) return true;
  20. if (miesiac > plat.miesiac) return false;
  21. if (dzien < plat.dzien) return true;
  22. if (dzien > plat.dzien) return false;
  23. //równe
  24. return false;
  25. }
  26. };
  27.  
  28. class stos_platnosci {
  29. protected:
  30. platnosc ** tab;
  31. int rozmiar;
  32. int pozycja;
  33.  
  34. public:
  35. //kontruktor z parametrem rozmiaru
  36. //ustawia początkową pozycję kolejki na -1 i tworzy dynamiczną tablicę wskaźników na platnosc
  37. stos_platnosci(int rozmiar){
  38. this->rozmiar = rozmiar;
  39. this->pozycja = -1;
  40. this->tab = new platnosc*[rozmiar];
  41. }
  42. //operator -=. Ten parametr int jest w zasadzie gówno potrzebny, na dobrą sprawę operator -= jest tutaj logicznie zbędny, ale polecenie to polecenie -.-
  43. //najpierw sprawdzam czy kolejka nie jest pusta. Jeśli nie to pobiera ostatnią płatność, usuwa ją z kolejki i zwraca jako wskaźnik
  44. platnosc * operator-=(int temp){
  45. if (this->pozycja == -1) return nullptr;
  46. platnosc * plat = this->tab[this->pozycja];
  47. delete this->tab[this->pozycja];
  48. this->pozycja--;
  49. return plat;
  50. }
  51. //dodaje platnosc na górze kolejki. Najpierw sprawdzam czy kolejka nie jest pełna. Funkcja zwraca true jeśli poprawnie doda element na górze kolejki
  52. //virtual bo funkcja ta jest nadpisywana przez kolejkę
  53. virtual bool put(platnosc * plat){
  54. if ((this->rozmiar - this->pozycja) == 1) return false;
  55. this->pozycja++;
  56. this->tab[this->pozycja] = plat;
  57. return true;
  58. }
  59.  
  60. //3 funkcje pomocnicze potrzebne przy przeciążaniu operatora = w kolejce
  61. int pobierzPozycje(){
  62. return this->pozycja;
  63. }
  64.  
  65. platnosc ** pobierzTablice(){
  66. return this->tab;
  67. }
  68.  
  69. int pobierzRozmiar(){
  70. return this->rozmiar;
  71. }
  72. };
  73.  
  74. class kolejka_wydatkow : public stos_platnosci {
  75. private:
  76. //funkcja do czyszczenia pamięci. Nie jest w destruktorze, bo ten kod wykorzystuję też przy operatorze =
  77. void czysc(){
  78. if (this->pozycja > -1)
  79. for (int i = 0; i <= this->pozycja; i++)
  80. delete this->tab[i];
  81. this->pozycja = -1;
  82. delete[] this->tab;
  83. }
  84. public:
  85. //destruktor. Przechodzi całą tablicę i zwalnia wszystkie płatności, po czym usuwa tablicę z pamięci
  86. ~kolejka_wydatkow(){
  87. this->czysc();
  88. }
  89.  
  90. //dodawanie platnosci na szczyt kolejki
  91. bool put(platnosc * plat){
  92. if ((this->rozmiar - this->pozycja) == 1) return false;
  93. this->pozycja++;
  94. //jeżeli tablica była pusta to nie trzeba nic sortować
  95. if (this->pozycja == 0){
  96. this->tab[this->pozycja] = plat;
  97. return true;
  98. }
  99. for (int i = this->pozycja - 1; i > 0; i--){
  100. if (this->tab[i] < plat){
  101. //jeżeli element jest mniejszy od dodawanego to przesuń go w prawo
  102. this->tab[i + 1] = this->tab[i];
  103. }else{
  104. //jeżeli element jest równy bądź większy od dodawanego to dodaj element w to miejsce i przerwij funkcję
  105. this->tab[i + 1] = plat;
  106. return true;
  107. }
  108. }
  109. //jeżeli program dotarł aż tutaj to znaczy że dodawany przez nas element jest największy w zbiorze
  110. this->tab[0] = plat;
  111. return true;
  112. }
  113.  
  114. bool operator=(stos_platnosci &stos){
  115. if (stos.pobierzPozycje() == -1) return false;
  116. //najpierw czyszczę całą aktualną kolejkę
  117. this->czysc();
  118. //na nowo tworzę tablicę i przypisuję rozmiar
  119. this->tab = new platnosc*[stos.pobierzRozmiar()];
  120. this->rozmiar = stos.pobierzRozmiar();
  121. platnosc ** tablica = stos.pobierzTablice();
  122. //krok po kroku przepisuję kolejkę używają funkcji put, która automatycznie sortuje elementy
  123. for (int i = 0; i <= stos.pobierzPozycje(); i++)
  124. this->put(tablica[i]);
  125. return true;
  126. }
  127. };
  128.  
  129. //co do operatora >> to szczerze mówiąc nie mam zielonego pojęcia jak się do tego w ogóle zabrać i jak ma to wyglądać
  130.  
  131. int _tmain(int argc, _TCHAR* argv[])
  132. {
  133. return 0;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement