Advertisement
harisha

stos

Feb 1st, 2015
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.57 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4.  
  5. using namespace std;
  6. enum stan_stosu {OK, PELNY, PUSTY}; // typ wyliczeniowy
  7.  
  8. class Stos
  9. {
  10. public:
  11.     int zdejmij()
  12.     {
  13.         int element = 0;
  14.         if(stan != PUSTY)
  15.         {
  16.             element = liczby_calkowite[--wierzcholek];
  17.         }
  18.         else
  19.         {
  20.             cout << "Stos jest pusty!" << endl;
  21.         }
  22.         if(wierzcholek <= 0)
  23.         {
  24.             stan = PUSTY;
  25.         }
  26.         else
  27.         {
  28.             stan = OK;
  29.         }
  30.     return element;
  31.  
  32.     }
  33.    
  34.     void listuj(void)
  35.     {
  36.         for (int i = wierzcholek-1; i >= 0; i-- )
  37.             {
  38.                 cout<<liczby_calkowite[i]<<endl;
  39.             }
  40.     }
  41.    
  42.     void poloz(int element)
  43.     {
  44.         if(stan != PELNY)
  45.         {
  46.             liczby_calkowite[wierzcholek++] = element;
  47.         }
  48.         else
  49.         {
  50.              cout << "Stos jest pelny!" << endl;
  51.         }
  52.        
  53.         if(wierzcholek >= max_wys)
  54.         {
  55.             stan = PELNY;
  56.         }
  57.         else
  58.         {
  59.             stan = OK;
  60.         }
  61.              
  62.     }
  63.    
  64.     int ile_elementow()
  65.     {
  66.         return wierzcholek;
  67.     }
  68.     int Wys()
  69.     {
  70.         return max_wys;
  71.     }
  72.     int Wierzch()
  73.     {
  74.         return wierzcholek;
  75.     }
  76.     int *pobierzTab()
  77.     {
  78.         return liczby_calkowite;
  79.     }
  80.     stan_stosu pobierzStan()
  81.     {
  82.         return stan;
  83.     }
  84.  
  85.    
  86.     Stos (){
  87.         stan = PUSTY;
  88.         wierzcholek = 0;
  89.         cout<<"Podaj wysokosc stosu: "<<endl;
  90.         cin>>max_wys;
  91.         liczby_calkowite = new int[max_wys];
  92.     }
  93.    
  94.     Stos (int wysokosc, int wierch, stan_stosu st, int *pom){
  95.         max_wys = wysokosc;
  96.         wierzcholek= wierch;
  97.         stan = st;
  98.         liczby_calkowite = pom;
  99.     }
  100.  
  101.     ~Stos (){
  102.         delete [] liczby_calkowite;
  103.     }
  104.    
  105. private:
  106.     int max_wys;
  107.     int *liczby_calkowite;
  108.     int wierzcholek;
  109.     stan_stosu stan;
  110.    
  111.     };
  112.  
  113.    
  114. int main()
  115. {
  116.    
  117.     Stos* tab[5]={NULL};
  118.     int wybor = 0;
  119.     int l_s = 0;
  120.     int el = 0;
  121.    
  122.    
  123.     do{
  124.         cout<<"~~~~Stos~~~~"<<endl;
  125.         cout<<"1. Stworz stos" <<endl;
  126.         cout<<"2. Poloz na stosie"<<endl;
  127.         cout<<"3. Zdejmij ze stosu"<<endl;
  128.         cout<<"4. Wyswietl elementy stosu"<<endl;
  129.         cout<<"5. Usun stos"<<endl;
  130.         cout<<"6. Przeslij stos do pliku"<<endl;
  131.         cout<<"7. Wypisz stos z pliku"<<endl;
  132.         cout<<"0. Wyjdz z programu"<<endl;
  133.         cout<< endl;
  134.         cout<<"Wybierz opcje: ";
  135.         cin>>wybor;
  136.        
  137.         switch(wybor){
  138.             case 1: //stworz
  139.                 {
  140.                     cout << "Podaj nr stosu (od 1 do 5):  " ;
  141.                     cin>>l_s;
  142.                     if(tab[l_s-1]!=NULL)
  143.                     {
  144.                         cout<<"Istnieje juz taki stos!"<<endl;
  145.                     }
  146.                     else
  147.                     {  
  148.                         tab[l_s-1] = new Stos; 
  149.                     }
  150.                    
  151.                     break;
  152.                 }
  153.             case 2: //poloz
  154.                 {
  155.                     cout << "Podaj nr stosu (od 1 do 5):  ";
  156.                     cin >> l_s;
  157.                     if(tab[l_s-1]==NULL)
  158.                     {
  159.                         cout<<"Stos nie istnieje"<<endl;
  160.                     }
  161.                     else
  162.                     {  
  163.                         cout << "Podaj liczbe do dodania na stos:  ";
  164.                         cin >> el;
  165.                         cout << endl;
  166.                         tab[l_s-1]->poloz(el); 
  167.                     }
  168.                     cout << endl;
  169.            
  170.                     break; 
  171.                 }          
  172.             case 3: //zdejmij
  173.                 {
  174.                     cout << "Podaj nr stosu (od 1 do 5):  ";
  175.                     cin >> l_s;
  176.                     cout << endl;
  177.                     if(tab[l_s-1]!=NULL)
  178.                     {
  179.                         cout << "Sciagnales:  " ;
  180.                         cout<<tab[l_s-1]->zdejmij();
  181.                     }
  182.                     else
  183.                     {  
  184.                         cout<<"Stos nie istnieje!"<<endl;  
  185.                     }
  186.                     break;
  187.                 }
  188.             case 4: //wyswietl
  189.                 {
  190.                     cout << "Podaj nr stosu (od 1 do 5):  " ;
  191.                     cin>>l_s;
  192.                     cout << endl;
  193.                     if(tab[l_s-1]!=NULL)
  194.                     {
  195.                         tab[l_s-1]->listuj();
  196.                     }
  197.                     else
  198.                     {  
  199.                         cout<<"Stos nie istnieje!"<<endl;
  200.                     }
  201.                     break;
  202.                 }  
  203.             case 5: //usuwanie
  204.                 {
  205.                     cout << "Podaj nr stosu (od 1 do 5):  ";   
  206.                     cin >> l_s;
  207.                     if(l_s<1 || l_s>6)
  208.                     {
  209.                         cout<<"Wpisz wartosc od 1 do 5!!!"<<endl;
  210.                     }
  211.                     else
  212.                     {
  213.                         if(tab[l_s-1]==NULL)
  214.                         {
  215.                             cout<<"Nie mozna usunac stosu, ktory nie istnieje!"<<endl;
  216.                         }
  217.                         else
  218.                         {
  219.                             delete tab[l_s-1];
  220.                             cout << endl;
  221.                             cout<<"Usunieto  stos"<<endl;
  222.                             tab[l_s-1] = NULL;
  223.                         }
  224.                        
  225.                         cout << endl;
  226.                     }
  227.                     break;             
  228.                }   
  229.             case 6:
  230.                 {
  231.                     cout << "Podaj nr stosu (od 1 do 5):  ";
  232.                     cin >> l_s;
  233.                     if(tab[l_s-1]!=NULL)
  234.                     {
  235.                         if(tab[l_s-1])
  236.                         {
  237.                             int *pom;
  238.                             ofstream plik;
  239.                             plik.open("stos.txt");
  240.                             if(plik.good() == true)
  241.                             {
  242.                                 plik<<tab[l_s-1]->Wys()<<endl;
  243.                                 plik<<tab[l_s-1]->Wierzch()<<endl;
  244.                                 plik<<tab[l_s-1]->pobierzStan()<<endl<<endl;
  245.                                 pom = tab[l_s-1]->pobierzTab();
  246.                                 for (int i = 0; i<(tab[l_s-1]->Wierzch()); i++)
  247.                                 {                      
  248.                                     plik<<pom[i]<<endl;
  249.                                 }
  250.                                 plik.close();
  251.                             }
  252.                             else
  253.                                 cout<<"Blad otwierania pliku!"<<endl;
  254.                         }
  255.                         else
  256.                             cout<<"Brak stosu!"<<endl;
  257.                     }
  258.                     else
  259.                     {
  260.                         cout<<"Nie ma takiego stosu!"<<endl;
  261.                     }
  262.                     break;
  263.                 }
  264.                    
  265.                
  266.             case 7:
  267.                 {
  268.                     ifstream plik;
  269.                     cout<<"Podaj nr stosu (od 1 do 5): ";
  270.                     cin>>l_s;
  271.  
  272.                     int wysokosc, wierzch, *pom;
  273.                     int stan;
  274.                     stan_stosu st;
  275.                            
  276.                     plik.open( "stos.txt");
  277.                     if( plik.good() == true )
  278.                     {
  279.                         plik>>wysokosc;
  280.                         plik>>wierzch;
  281.                         plik>>stan;
  282.                         st = (stan_stosu)stan;
  283.                         pom = new int[wysokosc];
  284.                         for (int i =0; i<wierzch; i++)
  285.                         {
  286.                             plik>>pom[i];      
  287.                         }
  288.                         tab[l_s-1] = new Stos (wysokosc, wierzch, st, pom);
  289.                         plik.close();
  290.                     }  
  291.                     else
  292.                     {
  293.                         cout<<"Blad otwierania pliku!"<<endl;
  294.                     }
  295.                     break;
  296.                 }
  297.             case 0:
  298.                 {
  299.                     cout << "Do zobaczenia! :)" <<endl;
  300.                     break;
  301.                 }
  302.             default:
  303.                 {
  304.                     cout << "Podaj poprawna wartosc!" <<endl;
  305.                     cout << endl;
  306.                     break;
  307.                 }
  308.         }
  309.         cout<<endl;
  310.         system("pause");
  311.         system("cls");
  312.        
  313.     }while(wybor);
  314.    
  315.  
  316.  
  317.     return 0;
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement