Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- #include <fstream>
- using namespace std;
- enum stan_stosu {OK, PELNY, PUSTY}; // typ wyliczeniowy
- class Stos
- {
- public:
- int zdejmij()
- {
- int element = 0;
- if(stan != PUSTY)
- {
- element = liczby_calkowite[--wierzcholek];
- }
- else
- {
- cout << "Stos jest pusty!" << endl;
- }
- if(wierzcholek <= 0)
- {
- stan = PUSTY;
- }
- else
- {
- stan = OK;
- }
- return element;
- }
- void listuj(void)
- {
- for (int i = wierzcholek-1; i >= 0; i-- )
- {
- cout<<liczby_calkowite[i]<<endl;
- }
- }
- void poloz(int element)
- {
- if(stan != PELNY)
- {
- liczby_calkowite[wierzcholek++] = element;
- }
- else
- {
- cout << "Stos jest pelny!" << endl;
- }
- if(wierzcholek >= max_wys)
- {
- stan = PELNY;
- }
- else
- {
- stan = OK;
- }
- }
- int ile_elementow()
- {
- return wierzcholek;
- }
- int Wys()
- {
- return max_wys;
- }
- int Wierzch()
- {
- return wierzcholek;
- }
- int *pobierzTab()
- {
- return liczby_calkowite;
- }
- stan_stosu pobierzStan()
- {
- return stan;
- }
- Stos (){
- stan = PUSTY;
- wierzcholek = 0;
- cout<<"Podaj wysokosc stosu: "<<endl;
- cin>>max_wys;
- liczby_calkowite = new int[max_wys];
- }
- Stos (int wysokosc, int wierch, stan_stosu st, int *pom){
- max_wys = wysokosc;
- wierzcholek= wierch;
- stan = st;
- liczby_calkowite = pom;
- }
- ~Stos (){
- delete [] liczby_calkowite;
- }
- private:
- int max_wys;
- int *liczby_calkowite;
- int wierzcholek;
- stan_stosu stan;
- };
- int main()
- {
- Stos* tab[5]={NULL};
- int wybor = 0;
- int l_s = 0;
- int el = 0;
- do{
- cout<<"~~~~Stos~~~~"<<endl;
- cout<<"1. Stworz stos" <<endl;
- cout<<"2. Poloz na stosie"<<endl;
- cout<<"3. Zdejmij ze stosu"<<endl;
- cout<<"4. Wyswietl elementy stosu"<<endl;
- cout<<"5. Usun stos"<<endl;
- cout<<"6. Przeslij stos do pliku"<<endl;
- cout<<"7. Wypisz stos z pliku"<<endl;
- cout<<"0. Wyjdz z programu"<<endl;
- cout<< endl;
- cout<<"Wybierz opcje: ";
- cin>>wybor;
- switch(wybor){
- case 1: //stworz
- {
- cout << "Podaj nr stosu (od 1 do 5): " ;
- cin>>l_s;
- if(tab[l_s-1]!=NULL)
- {
- cout<<"Istnieje juz taki stos!"<<endl;
- }
- else
- {
- tab[l_s-1] = new Stos;
- }
- break;
- }
- case 2: //poloz
- {
- cout << "Podaj nr stosu (od 1 do 5): ";
- cin >> l_s;
- if(tab[l_s-1]==NULL)
- {
- cout<<"Stos nie istnieje"<<endl;
- }
- else
- {
- cout << "Podaj liczbe do dodania na stos: ";
- cin >> el;
- cout << endl;
- tab[l_s-1]->poloz(el);
- }
- cout << endl;
- break;
- }
- case 3: //zdejmij
- {
- cout << "Podaj nr stosu (od 1 do 5): ";
- cin >> l_s;
- cout << endl;
- if(tab[l_s-1]!=NULL)
- {
- cout << "Sciagnales: " ;
- cout<<tab[l_s-1]->zdejmij();
- }
- else
- {
- cout<<"Stos nie istnieje!"<<endl;
- }
- break;
- }
- case 4: //wyswietl
- {
- cout << "Podaj nr stosu (od 1 do 5): " ;
- cin>>l_s;
- cout << endl;
- if(tab[l_s-1]!=NULL)
- {
- tab[l_s-1]->listuj();
- }
- else
- {
- cout<<"Stos nie istnieje!"<<endl;
- }
- break;
- }
- case 5: //usuwanie
- {
- cout << "Podaj nr stosu (od 1 do 5): ";
- cin >> l_s;
- if(l_s<1 || l_s>6)
- {
- cout<<"Wpisz wartosc od 1 do 5!!!"<<endl;
- }
- else
- {
- if(tab[l_s-1]==NULL)
- {
- cout<<"Nie mozna usunac stosu, ktory nie istnieje!"<<endl;
- }
- else
- {
- delete tab[l_s-1];
- cout << endl;
- cout<<"Usunieto stos"<<endl;
- tab[l_s-1] = NULL;
- }
- cout << endl;
- }
- break;
- }
- case 6:
- {
- cout << "Podaj nr stosu (od 1 do 5): ";
- cin >> l_s;
- if(tab[l_s-1]!=NULL)
- {
- if(tab[l_s-1])
- {
- int *pom;
- ofstream plik;
- plik.open("stos.txt");
- if(plik.good() == true)
- {
- plik<<tab[l_s-1]->Wys()<<endl;
- plik<<tab[l_s-1]->Wierzch()<<endl;
- plik<<tab[l_s-1]->pobierzStan()<<endl<<endl;
- pom = tab[l_s-1]->pobierzTab();
- for (int i = 0; i<(tab[l_s-1]->Wierzch()); i++)
- {
- plik<<pom[i]<<endl;
- }
- plik.close();
- }
- else
- cout<<"Blad otwierania pliku!"<<endl;
- }
- else
- cout<<"Brak stosu!"<<endl;
- }
- else
- {
- cout<<"Nie ma takiego stosu!"<<endl;
- }
- break;
- }
- case 7:
- {
- ifstream plik;
- cout<<"Podaj nr stosu (od 1 do 5): ";
- cin>>l_s;
- int wysokosc, wierzch, *pom;
- int stan;
- stan_stosu st;
- plik.open( "stos.txt");
- if( plik.good() == true )
- {
- plik>>wysokosc;
- plik>>wierzch;
- plik>>stan;
- st = (stan_stosu)stan;
- pom = new int[wysokosc];
- for (int i =0; i<wierzch; i++)
- {
- plik>>pom[i];
- }
- tab[l_s-1] = new Stos (wysokosc, wierzch, st, pom);
- plik.close();
- }
- else
- {
- cout<<"Blad otwierania pliku!"<<endl;
- }
- break;
- }
- case 0:
- {
- cout << "Do zobaczenia! :)" <<endl;
- break;
- }
- default:
- {
- cout << "Podaj poprawna wartosc!" <<endl;
- cout << endl;
- break;
- }
- }
- cout<<endl;
- system("pause");
- system("cls");
- }while(wybor);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement