Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include "wymierna.h"
- #include "StackCalculator.h"
- #include <conio.h>
- using namespace std;
- int steruj();
- int main()
- {
- bool koniec=false;
- int wyn=0;
- int s=0;
- do
- {
- cout<<"witaj w programie Stack Calculator"<<endl<<"(Sterowanie za pomoca strzalek klawiatury)";
- switch( s )
- {
- case 0:
- cout<<endl<<"-> Wykonaj obliczenia na liczbach wymiernych";
- cout<<endl<<" Wykonaj obliczenia na liczbach calkowitych";
- cout<<endl<<" Wykonaj obliczenia na liczbach rzeczywistych";
- cout<<endl<<" Zakoncz program";
- break;
- case 1:
- cout<<endl<<" Wykonaj obliczenia na liczbach wymiernych";
- cout<<endl<<"-> Wykonaj obliczenia na liczbach calkowitych";
- cout<<endl<<" Wykonaj obliczenia na liczbach rzeczywistych";
- cout<<endl<<" Zakoncz program";
- break;
- case 2:
- cout<<endl<<" Wykonaj obliczenia na liczbach wymiernych";
- cout<<endl<<" Wykonaj obliczenia na liczbach calkowitych";
- cout<<endl<<"-> Wykonaj obliczenia na liczbach rzeczywistych";
- cout<<endl<<" Zakoncz program";
- break;
- case 3:
- cout<<endl<<" Wykonaj obliczenia na liczbach wymiernych";
- cout<<endl<<" Wykonaj obliczenia na liczbach calkowitych";
- cout<<endl<<" Wykonaj obliczenia na liczbach rzeczywistych";
- cout<<endl<<"-> Zakoncz program";
- break;
- }
- wyn=steruj();
- s+=wyn;
- if(s>3)
- s=0;
- else
- if (s<0)
- s=3;
- /**================================================================*/
- if (wyn==0)
- {
- bool powrot=false;
- switch (s)
- {
- case 0://=======================================================liczby wymierne
- {
- StackCalculator<Wymierna> st;
- Wymierna liczba;
- system("cls");
- s=0;
- do
- {
- cout<<endl<<"Stack Calculator liczb wymiernych";
- switch(s)
- {
- case 0:
- cout<<endl<<"->Wprowadz liczbe typu wymierna";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 1:
- cout<<endl<<" Wprowadz liczbe typu wymierna";
- cout<<endl<<"->Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 2:
- cout<<endl<<" Wprowadz liczbe typu wymierna";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<"->Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 3:
- cout<<endl<<" Wprowadz liczbe typu wymierna";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<"->Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 4:
- cout<<endl<<" Wprowadz liczbe typu wymierna";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<"->Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 5:
- cout<<endl<<" Wprowadz liczbe typu wymierna";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<"->Powrot do menu glownego";
- st.wyswietl();
- break;
- }
- wyn=steruj();
- s+=wyn;
- if(s>5)
- {
- s=0;
- }
- if (s<0)
- {
- s=5;
- }
- if(wyn==0)
- {
- switch(s)
- {
- case 0:
- system("cls");
- cout<<"wprowadz liczbe wymierna: "<<endl;
- cin>>liczba;
- st.wstaw(liczba,INP);
- break;
- case 1://wybieranie dzialania
- {
- system("cls");
- char a;
- do
- {
- cout<<"Wybierz dzialanie: "<<endl<<"[1]-dodawanie"<<endl<<"[2]-odejmowanie"<<endl<<"[3]-mnozenie";
- cout<<endl<<"[4]-dzielenie"<<endl<<"[5]-negacja"<<endl<<"[6]-Anuluj dodawanie dzialania";
- a = getch();
- if(a<49 || a>54)
- {
- system("cls");
- cout<<"wprowadzony znak nie byl cyfra z zakresu 1-6"<<endl<<"Powtorz wprowadzanie"<<endl;
- }
- }while(a<49 || a>54);
- cout<<endl<<"wybor: "<<a-48;
- getch();
- switch(a-48)
- {
- case 1:
- st.wstaw(Wymierna(),ADD);
- break;
- case 2:
- st.wstaw(Wymierna(),SUB);
- break;
- case 3:
- st.wstaw(Wymierna(),MUL);
- break;
- case 4:
- st.wstaw(Wymierna(),DIV);
- break;
- case 5:
- st.wstaw(Wymierna(),NEG);
- break;
- case 6:
- break;
- }
- }
- break;
- case 2://wykonuje dzialania
- {
- bool blad=false;
- liczba = st.wykonaj(st.pobierz(),blad);
- if(blad)
- {
- cout<<endl<<"Dzialanie wykonane niepoprawnie, brak argumentow dla operatorow lub zla kolejnosc wprowadzenia"<<endl;
- st.usunStos();
- getch();
- }
- else
- {
- cout<<endl<<"Wynik dzialan jest rowny: "<<liczba<<endl;
- getch();
- }
- }
- break;
- case 3://kasuje ostatni wprowadzony element
- st.usunOstatni();
- break;
- case 4://kasuje stos
- st.usunStos();
- break;
- case 5://wraca z liczb wymiernych do glownego ekranu
- powrot=true;
- break;
- }
- }
- system("cls");
- }while(!powrot);
- s=0;
- }
- break;
- case 1: //==================================================Liczby calkowite
- {
- system("cls");
- StackCalculator<int> st;
- int liczba;
- s=0;
- do
- {
- cout<<endl<<"Stack Calculator liczb calkowitych";
- switch(s)
- {
- case 0:
- cout<<endl<<"->Wprowadz liczbe typu calkowita";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 1:
- cout<<endl<<" Wprowadz liczbe typu calkowita";
- cout<<endl<<"->Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 2:
- cout<<endl<<" Wprowadz liczbe typu calkowita";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<"->Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 3:
- cout<<endl<<" Wprowadz liczbe typu calkowita";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<"->Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 4:
- cout<<endl<<" Wprowadz liczbe typu calkowita";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<"->Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 5:
- cout<<endl<<" Wprowadz liczbe typu calkowita";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<"->Powrot do menu glownego";
- st.wyswietl();
- break;
- }
- wyn=steruj();
- s+=wyn;
- if(s>5)
- s=0;
- else
- if (s<0)
- s=5;
- if(wyn==0)
- {
- switch(s)
- {
- case 0://wprowadza liczbe calkowita
- {
- char a;
- liczba=0;
- bool poprawna=true;
- int znak=1;
- system("cls");
- do
- {
- cout<<"wprowadz liczbe calkowita: "<<endl;
- a = getch();
- if((a<48 || a>57) && a!=45)
- {
- if(a!=13)
- {
- system("cls");
- cout<<"wprowadzony znak nie byl cyfra"<<endl<<"Powtorz wprowadzanie liczby"<<endl;
- a=13;
- liczba=0;
- poprawna=false;
- }
- }
- else
- {
- if (a==45)
- {
- cout<<"-";
- znak=-1;
- poprawna=true;
- }
- else
- {
- cout<<a;
- liczba=liczba*10+a-48;
- poprawna=true;
- }
- }
- do
- {
- a = getch();
- if(a<48 || a>57)
- {
- if(a!=13)
- {
- system("cls");
- cout<<"wprowadzony znak nie byl cyfra"<<endl<<"Powtorz wprowadzanie liczby"<<endl;
- a=13;
- liczba=0;
- poprawna=false;
- }
- }
- else
- {
- cout<<a;
- liczba=liczba*10+a-48;
- poprawna=true;
- }
- }while(a!=13);
- }while(!poprawna);
- liczba=liczba*znak;
- st.wstaw(liczba,INP);
- }
- break;
- case 1://wstawia dzialanie
- {
- system("cls");
- char a;
- do
- {
- cout<<"Wybierz dzialanie: "<<endl<<"[1]-dodawanie"<<endl<<"[2]-odejmowanie"<<endl<<"[3]-mnozenie"<<endl<<"[4]-dzielenie";
- cout<<endl<<"[5]-negacja"<<endl<<"[6]-Anuluj dodawanie dzialania";
- a = getch();
- if(a<49 || a>54)
- {
- system("cls");
- cout<<"wprowadzony znak nie byl cyfra z zakresu 1-6"<<endl<<"Powtorz wprowadzanie"<<endl;
- }
- }while(a<49 || a>54);
- cout<<endl<<"wybor: "<<a-48;
- getch();
- switch(a-48)
- {
- case 1:
- st.wstaw(1,ADD);
- break;
- case 2:
- st.wstaw(1,SUB);
- break;
- case 3:
- st.wstaw(1,MUL);
- break;
- case 4:
- st.wstaw(1,DIV);
- break;
- case 5:
- st.wstaw(1,NEG);
- break;
- case 6:
- break;
- }
- }
- break;
- case 2://wykonuje dzialanie
- {
- liczba=0;
- bool blad=false;
- liczba = st.wykonaj(st.pobierz(),blad);
- if(blad)
- {
- cout<<endl<<"Dzialanie wykonane niepoprawnie, brak argumentow dla operatorow lub zla kolejnosc wprowadzenia"<<endl;
- st.usunStos();
- getch();
- }
- else
- {
- cout<<endl<<"Wynik dzialan jest rowny: "<<liczba<<endl;
- getch();
- }
- }
- break;
- case 3://usuwa ostatni wprowadzony
- st.usunOstatni();
- break;
- case 4://usuwa stos
- st.usunStos();
- break;
- case 5://wraca z liczb calkowitych do glownego ekranu
- powrot=true;
- break;
- }
- }
- system("cls");
- }while(!powrot);
- s=0;
- }
- break;
- case 2: //=================================================Liczby rzeczywiste
- {
- system("cls");
- StackCalculator<double> st;
- double liczba;
- s=0;
- do
- {
- cout<<endl<<"Stack Calculator liczb rzeczywistych";
- switch(s)
- {
- case 0:
- cout<<endl<<"->Wprowadz liczbe typu rzeczywista";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 1:
- cout<<endl<<" Wprowadz liczbe typu rzeczywista";
- cout<<endl<<"->Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 2:
- cout<<endl<<" Wprowadz liczbe typu rzeczywista";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<"->Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 3:
- cout<<endl<<" Wprowadz liczbe typu rzeczywista";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<"->Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 4:
- cout<<endl<<" Wprowadz liczbe typu rzeczywista";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<"->Usun stos";
- cout<<endl<<" Powrot do menu glownego";
- st.wyswietl();
- break;
- case 5:
- cout<<endl<<" Wprowadz liczbe typu rzeczywista";
- cout<<endl<<" Wprowadz dzialanie";
- cout<<endl<<" Wykonaj i wyswietl wynik";
- cout<<endl<<" Usun ostatni wprowadzony";
- cout<<endl<<" Usun stos";
- cout<<endl<<"->Powrot do menu glownego";
- st.wyswietl();
- break;
- }
- wyn=steruj();
- s+=wyn;
- if(s>5)
- s=0;
- else
- if (s<0)
- s=5;
- if(wyn==0)
- {
- switch(s)
- {
- case 0://wprowadza liczbe rzeczywista
- {
- system("cls");
- cin.clear();
- cin.sync();
- do
- {
- if(cin.good())
- {
- cout<<endl<<"Podaj liczbe rzeczywista: ";
- cin>>liczba;
- }
- else
- {
- system("cls");
- cin.clear();
- cin.sync();
- cout<<endl<<"Wprowadzono niepoprawna liczbe rzeczywista."<<endl<<"Podaj liczbe rzeczywista: ";
- cin>>liczba;
- }
- }
- while(!cin.good());
- st.wstaw(liczba,INP);
- }
- break;
- case 1://wprowadza dzialanie
- {
- system("cls");
- char a;
- do
- {
- cout<<"Wybierz dzialanie: "<<endl<<"[1]-dodawanie"<<endl<<"[2]-odejmowanie"<<endl<<"[3]-mnozenie"<<endl<<"[4]-dzielenie";
- cout<<endl<<"[5]-negacja"<<endl<<"[6]-Anuluj dodawanie dzialania";
- a = getch();
- if(a<49 || a>54)
- {
- system("cls");
- cout<<"wprowadzony znak nie byl cyfra z zakresu 1-6"<<endl<<"Powtorz wprowadzanie"<<endl;
- }
- }while(a<49 || a>54);
- cout<<endl<<"wybor: "<<a-48;
- getch();
- switch(a-48)
- {
- case 1:
- st.wstaw(1,ADD);
- break;
- case 2:
- st.wstaw(1,SUB);
- break;
- case 3:
- st.wstaw(1,MUL);
- break;
- case 4:
- st.wstaw(1,DIV);
- break;
- case 5:
- st.wstaw(1,NEG);
- break;
- case 6:
- break;
- }
- }
- break;
- case 2://oblicza i wyswietla wynik
- {
- liczba=0;
- bool blad=false;
- liczba = st.wykonaj(st.pobierz(),blad);
- if(blad)
- {
- cout<<endl<<"Dzialanie wykonane niepoprawnie, brak argumentow dla operatorow lub zla kolejnosc wprowadzenia"<<endl;
- st.usunStos();
- getch();
- }
- else
- {
- cout<<endl<<"Wynik dzialan jest rowny: "<<liczba<<endl;
- getch();
- }
- }
- break;
- case 3://usuwa ostatni wprowadzony
- st.usunOstatni();
- break;
- case 4://usuwa stos
- st.usunStos();
- break;
- case 5://wraca z liczb rzeczywistych do glownego ekranu
- powrot=true;
- break;
- }
- }
- system("cls");
- }while(!powrot);
- s=0;
- }
- break;
- case 3:
- koniec=true;
- break;
- }
- }
- system("cls");
- }while(!koniec);
- return 0;
- }
- int steruj()
- {
- while( true )
- {
- unsigned char znak = getch();
- switch( znak )
- {
- case 0:
- case 224:
- znak = getch();
- switch( znak )
- {
- case 72:
- return -1;//strzalka w
- break;
- case 80:
- return 1;//strzalka w dรณล
- break;
- }
- znak = 0;
- break;
- case 13:
- return 0; //ENTER
- break;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement