Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef STACKCALCULATOR_H_INCLUDED
- #define STACKCALCULATOR_H_INCLUDED
- #endif // STACKCALCULATOR_H_INCLUDED
- enum operacja
- {
- ADD='+',SUB='-',MUL='*',DIV='/',NEG='~',REV='R',INP='I'
- };
- template <typename T> class StackCalculator
- {
- struct Element
- {
- T wartosc;
- operacja znak;
- Element *nastepny;
- };
- Element *koniec;
- void rekurencja(Element* temp)
- {
- if(temp==NULL)
- {
- cout<<endl<<"Stack: [";
- }
- else
- {
- rekurencja(temp->nastepny);
- if(temp->znak==INP)
- {
- cout<<temp->wartosc<<",";
- }
- else
- {
- cout<<(char)temp->znak<<",";
- }
- }
- }
- //konstruktor
- public:
- StackCalculator(T wartosc, operacja znak)
- {
- struct Element *nowy = new Element;
- nowy->wartosc = wartosc;
- nowy->znak=znak;
- nowy->nastepny = NULL;
- koniec = nowy;
- };
- StackCalculator()
- {
- koniec =NULL;
- };
- ~StackCalculator()
- {
- Element* temp;
- while(koniec!=NULL)
- {
- temp=koniec;
- koniec=koniec->nastepny;
- delete temp;
- }
- };
- void usunStos()
- {
- Element* temp;
- while(koniec!=NULL)
- {
- temp=koniec;
- koniec=koniec->nastepny;
- delete temp;
- }
- }
- void usunOstatni()
- {
- if(koniec!=NULL)
- {
- Element *temp;
- temp=koniec;
- koniec=koniec->nastepny;
- delete temp;
- }
- }
- void wyswietl()
- {
- rekurencja(koniec);
- cout<<"]";
- }
- void wstaw(T wartosc, operacja znak)
- {
- struct Element *nowy = new Element;
- nowy->wartosc = wartosc;
- nowy->znak=znak;
- nowy->nastepny = koniec;
- koniec = nowy;
- };
- bool pusty()
- {
- if(koniec==NULL)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- Element* pobierz()
- {
- if(koniec==NULL)
- {
- cout<<endl<<"Koniec stosu";
- return NULL;
- }
- else
- {
- Element* a = koniec;
- struct Element *tymczasowa = koniec->nastepny;
- koniec=NULL;
- delete koniec;
- koniec = tymczasowa;
- return a;
- }
- };
- T wykonaj(Element *wykonanie, bool &blad)
- {
- if (wykonanie==NULL)
- {
- blad=true;
- }
- else
- {
- switch (wykonanie->znak)
- {
- case INP:
- {
- if(wykonanie->nastepny!=NULL)
- {
- blad=true;
- }
- else
- {
- blad=false;
- }
- return wykonanie->wartosc;
- }
- break;
- case ADD:
- {
- return wykonaj(pobierz(),blad)+wykonaj(pobierz(),blad);
- }
- break;
- case SUB:
- {
- T wartosc1 = wykonaj(pobierz(),blad);
- T wartosc2 = wykonaj(pobierz(),blad);
- return wartosc2-wartosc1;
- }
- break;
- case MUL:
- {
- return wykonaj(pobierz(),blad)*wykonaj(pobierz(),blad);
- }
- break;
- case DIV:
- {
- T wartosc1 = wykonaj(pobierz(),blad);
- T wartosc2 = wykonaj(pobierz(),blad);
- return wartosc2/wartosc1;}
- break;
- /*case REV:
- {
- return !wykonaj(pobierz(),blad));
- }
- break;*/
- case NEG:
- {
- return wykonaj(pobierz(),blad)*(-1);
- }
- break;
- /*case POT:
- {
- return
- }
- break;
- */
- }
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement