luk_per

show_while

Dec 18th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.67 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstdlib>
  3. using namespace std;
  4.  
  5. int licznik_k=0;
  6. int licznik_s_w=0;
  7.  
  8. class Kulka
  9. {
  10.     int v,stan;
  11.     Kulka *lewy,*prawy,*ojciec;
  12. public:
  13.     Kulka()
  14.     {
  15.         v=rand()%100;
  16.         cout<<"K: "<<v<<endl;
  17.         lewy=NULL;
  18.         prawy=NULL;
  19.         ojciec=NULL;
  20.         licznik_k++;
  21.         stan=0;
  22.     }
  23.  
  24.     void dodaj(Kulka *nowa)
  25.     {
  26.         if (nowa->v<v)
  27.         {
  28.             if (lewy==NULL)
  29.             {
  30.                 lewy=nowa;
  31.                 nowa->ojciec=this;
  32.             }
  33.             else
  34.                 lewy->dodaj(nowa);
  35.         }
  36.  
  37.         else
  38.         {
  39.             if (prawy==NULL)
  40.             {
  41.                 prawy=nowa;
  42.                 nowa->ojciec=this;
  43.             }
  44.             else
  45.                 prawy->dodaj(nowa);
  46.         }
  47.     }
  48.     void show_while(Kulka *temp)
  49.  
  50.     {
  51.         while(licznik_s_w!=licznik_k)
  52.         {
  53.  
  54.             switch(temp->stan)
  55.             {
  56.             case 0:
  57.                 if (temp->lewy)
  58.                 {
  59.                     temp->stan++; // zaznaczam, ze juz poszedlem w lewo
  60.                     temp=temp->lewy; // pojde w lewo
  61.                 }
  62.                 else // nie mam lewego. Wyswietle siebie i popracuje nad prawym
  63.                     temp->stan++;
  64.  
  65.                 break;
  66.  
  67.             case 1:
  68.                 cout<<endl<<"Pyk,pyk: "<<temp->v;   // nie mam lewego, albo juz go wyswietlilem, wiec wyswietle siebie
  69.                 licznik_s_w++;
  70.                 temp->stan++; // zaznacze to, dajac stan na 2
  71.                 break;
  72.             case 2: // nie mam lewego, albo go wyswietlilem, siebie wyswietlilem, to pracuje nad prawym
  73.                 if (temp->prawy) // zobacze, czy mam prawego
  74.                 {
  75.                     temp->stan++;// zaznacze, ze poszedlem juz w prawo, zanim w ogole pojde
  76.                     temp=temp->prawy; // ide do prawego
  77.                 }
  78.                 else
  79.                     temp->stan=4; // nie mam prawego, pojde do gory. Pomine stan=3
  80.  
  81.                 break;
  82.  
  83.             case 3:// lewego nie mam, albo juz na nim bylem, bylem na prawym, to ide do gory
  84.                 temp->stan++;
  85.             case 4: // nie mam prawego, ide do gory
  86.                 temp=temp->ojciec;
  87.                 break;
  88.             }
  89.         }
  90.     }
  91.  
  92. };
  93.  
  94.  
  95. int main()
  96. {
  97.     Kulka *root=new Kulka();
  98.     Kulka *nowa=NULL;
  99.     Kulka *temp=root;
  100.     for (int i=0; i<19; i++)
  101.     {
  102.         nowa=new Kulka();
  103.         root->dodaj(nowa);
  104.     }
  105.     cout<<"\n\nStworzylem "<<licznik_k<<" elementow."<<endl;
  106.  
  107.  
  108.     root->show_while(temp);
  109.     cout<<"\n\nPokazalem "<<licznik_s_w<<" elementow."<<endl;
  110.  
  111. }
Add Comment
Please, Sign In to add comment