mituri

[C++] Klasa Stos do obsługi stosu + wyjatki

Oct 1st, 2015
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 KB | None | 0 0
  1. /*
  2.  
  3. Opracować klasę Stos do obsługi stosu, którego elementami składowymi będą wyrazy. Deklaracja klasy:
  4. class Stos {
  5. private:
  6. vector<string> wstos;
  7. public:
  8. bool wloz( const string& element); // wklada element na stos
  9. bool zdejmij (); // usuwa element ze stosu
  10. bool pobierz( string &element ); // pobiera wartosc element ze
  11. // szczytu, nie usuwa go
  12. bool pusty() const ;
  13. bool pelny() const ;
  14. int rozmiar() const ;
  15. };
  16. Napisać program testujący tę klasę.
  17. Wykonać dwie implementacje:
  18. a) z wykorzystaniem szablonu vector;
  19. b) z wykorzystaniem szablonu stack.
  20. Potrzebne funkcje działające na wektorze:
  21. v.push_back(el) - wstawia element na koniec wektora
  22. v.pop_back() - usuwa element z końca wektora
  23. v.back() - zwraca element z końca wektora
  24. v.empty() - zwraca true, jeśli wektor jest pusty
  25. v.size() - zwraca liczbę elementów w wektorze
  26. v.max_size() - zwraca rozmiar największego dopuszczalnego wektora.
  27.  
  28. Dodaj sprawdzanie sytuacji niepoprawnych, na przykład próbę pobieranie elementu z pustego stosu czy próbę zapisu na stosie, gdy brakuje miejsca. Zgłaszaj wyjątki
  29.  
  30. */
  31.  
  32. #include "stdafx.h"
  33. #include <queue>
  34. #include <cstdlib>
  35. #include <iostream>
  36. #include <string>
  37. #include <fstream>
  38. #include <stack>
  39.  
  40. using namespace std;
  41.  
  42. class Stos {
  43. private:
  44. vector<string> wstos;
  45. public:
  46. bool wloz( const string& element){ // wklada element na stos
  47. wstos.push_back(element);
  48. if(wstos.size() >= (wstos.max_size() - sizeof(Stos)))throw 0; // brak miejsc na nowy element bo maxSize
  49. return true;
  50. }
  51. bool zdejmij (){ // usuwa element ze stosu
  52. if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
  53. wstos.pop_back();
  54. return true;
  55. }
  56. bool pobierz( string &element ){ // pobiera wartosc element ze szczytu, nie usuwa go
  57. if(wstos.size() == 0) throw 1; // pusty stos
  58. wstos.back();
  59. return true;
  60. }
  61. bool pusty() const{
  62. if(wstos.empty()) return true;
  63. else return false;
  64. }
  65. bool pelny() const{
  66. if(wstos.size() >= wstos.max_size())return true;
  67. else return false;
  68. }
  69. int rozmiar() const{
  70. if(wstos.size())return true;
  71. }
  72. void pokaz(){
  73. if(wstos.size() == 0) throw 1; // pusty stos
  74. for(int i = 0; i < wstos.size(); i++){
  75. cout << wstos[i] << " ";
  76. }
  77. cout << endl;
  78. }
  79. };
  80.  
  81.  
  82. class StosStack {
  83. private:
  84. stack <string> wstos;
  85. public:
  86. bool wloz( const string& element){ // wklada element na stos
  87. wstos.push(element); // stack nie posiada odpowiednika max_size bedacej w vector
  88. return true;
  89. }
  90. bool zdejmij (){ // usuwa element ze stosu
  91. if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
  92. wstos.pop();
  93. return true;
  94. }
  95.  
  96. bool pobierz( string &element ){ // pobiera wartosc element ze szczytu, nie usuwa go
  97. if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
  98. wstos.top();
  99. return true;
  100. }
  101. bool pusty() const{
  102. if(wstos.empty()) return true;
  103. else return false;
  104. }
  105.  
  106. //bool pelny() const; stack nie posiada funkcji max_size jak vector;
  107.  
  108. int rozmiar() const{
  109. if(wstos.size())return true;
  110. }
  111. };
  112.  
  113.  
  114.  
  115. int _tmain(int argc, _TCHAR* argv[]){
  116.  
  117. Stos stos;
  118. stos.wloz("ala");
  119. stos.wloz("ma");
  120. stos.wloz("kota");
  121. try{
  122. stos.pokaz();
  123. stos.zdejmij();
  124. stos.pokaz();
  125.  
  126. bool czyPusty = stos.pusty();
  127. cout << "czy pusty(): " << czyPusty << endl;
  128.  
  129. bool czyPelny = stos.pelny();
  130. cout << "czy pelny(): " << czyPelny << endl;
  131.  
  132. int rozmiar = stos.rozmiar();
  133. cout << "rozmiar(): " << rozmiar << endl;
  134.  
  135. cout << "--------------\n\n";
  136.  
  137. StosStack stack;
  138. stack.wloz("ala");
  139. stack.wloz("ma");
  140. stack.wloz("kota");
  141.  
  142. czyPusty = stack.pusty();
  143. cout << "czy pusty(): " << czyPusty << endl;
  144.  
  145. rozmiar = stack.rozmiar();
  146. cout << "rozmiar(): " << rozmiar << endl;
  147. }
  148. catch(int errorNo){
  149. switch(errorNo){
  150. case 0: cout << " Brak miejsca na nowy element" << endl; ;break;
  151. case 1: cout << " Kolejka jest pusta, nie mozna wykonac funkcji " << endl; break;
  152. }
  153. }
  154.  
  155. system ("PAUSE");
  156. }
Advertisement
Add Comment
Please, Sign In to add comment