Advertisement
Guest User

Untitled

a guest
Jan 26th, 2015
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. template<typename T>//T używywane zamiast nazwy typu
  7. class Stack //stos
  8. {
  9.     T *stack;
  10.     int actSize, maxSize;
  11.     string nazwa;
  12.  
  13.     void resize()//funkcja, która powiększa tablice
  14.     {
  15.         maxSize *= 2;
  16.         T *nowaTablica = new T[maxSize]; //tworzenie nowej tablicy wielkosci nowego maxsize
  17.         memcpy(nowaTablica, stack, actSize*sizeof(T));//dokad,skad, ile
  18.  
  19.         delete[] stack;//usuwanie starej tablicy
  20.         stack = nowaTablica; //przypisanie wskaznika do nowej
  21.     }
  22.  
  23. public:
  24.     Stack(string nazwa)
  25.         :actSize(0), maxSize(10)
  26.     {
  27.         stack = new T[maxSize]; //nowa tablica typu T
  28.         this->nazwa = nazwa;
  29.  
  30.     }
  31.  
  32.     ~Stack()
  33.     {
  34.         delete[] stack;//usuwanie stosu
  35.     }
  36.  
  37.     void push(T obj)
  38.     {
  39.         if (actSize == maxSize)resize();
  40.         stack[actSize] = obj;
  41.         actSize++;
  42.     }
  43.  
  44.     T pop()
  45.     {
  46.         if (actSize == 0) return -1;
  47.         actSize--; //zmiejsza rozmiar
  48.         return stack[actSize];//zwaracanie ostatniego elementu
  49.     }
  50.  
  51.     int size(){
  52.         return actSize;
  53.     }
  54.  
  55.     string Nazwa(){
  56.         return nazwa;
  57.     }
  58. };
  59.  
  60. void przenies(Stack<int> &A, Stack<int> &C, Stack<int> &B, int n){
  61.     if (n > 1) przenies(A, B, C, n - 1);
  62.     int krazek = A.pop();
  63.     C.push(krazek);
  64.     cout << "Przenosze krazek nr: " << krazek << " z patyczka " << A.Nazwa() << " na patyczek " << C.Nazwa() << endl;
  65.     if (n > 1) przenies(B, C, A, n - 1);
  66. }
  67.  
  68. int main()
  69.  
  70. {
  71.     int krazki = 0;
  72.  
  73.     cout << "Wpisz liczbe krazkow" << endl;
  74.     cin >> krazki;
  75.     if (krazki <= 0)
  76.     {
  77.         cout << "Nie mozna przetestowac algorytmu dla 0 krazkow. Wpisz liczbe krazkow: " << endl;
  78.         cin >> krazki;
  79.  
  80.     }
  81.     cout << "Chcesz przetestowac algorytm wiez Hanoi dla: " << krazki << " krazkow" << endl;
  82.  
  83.     Stack<int> A("A"), B("B"), C("C");
  84.  
  85.     for (int i = krazki; i > 0; i--) A.push(i); //umieszczam krazki na slupku A
  86.  
  87.  
  88.     przenies(A, B, C, A.size());
  89.  
  90.  
  91.     return 0;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement