Zdravím, realizuji hanojské věže prostřednictvím zásobníků, ale někde mám chybu a nemůžu přijít, kde.
Zásobník:
template <class T> class Zasobnik
{
private:
T *arr;
int stackPointer;
int size;
public:
Zasobnik(const int s)
{
arr = new T[s];
stackPointer = -1;
size = s;
}
bool is_empty()
{
if (stackPointer == -1)
return true;
else
return false;
}
void push(T val)
{
if (++stackPointer >= size)
throw("Zasobnik je plny\n");
else
arr[stackPointer] = val;
}
T pop()
{
if (--stackPointer < -1)
throw("Zasobnik je prazdny\n");
return arr[stackPointer + 1];
}
};
a samotný program
#include <iostream>
#include "Zasobnik.hpp"
using namespace std;
void hVez(int pocet, Zasobnik <int> &tycA, Zasobnik <int> &tycC, Zasobnik <int> &tycB)
{
if (pocet > 0)
{
hVez(pocet - 1, tycA, tycB, tycC);
tycC.push(tycA.pop());
hVez(pocet - 1, tycB, tycC, tycA);
}
}
int main()
{
int pocet;
cout << "Zadejte pocet kuzelu: " << endl;
cin >> pocet;
if (cin.fail())
{
cerr << "Chyba na vstupu" << endl;
}
Zasobnik <int> tycA(pocet);
Zasobnik <int> tycB(pocet);
Zasobnik <int> tycC(pocet);
//naplníme tyč A
try
{
for (int i = pocet; i > 0; i--)
{
tycA.push(i);
}
hVez(pocet, tycA, tycB, tycC);
for (int i = pocet; i > 0; i--)
{
cout << tycC.pop() << endl;
}
}
catch (char* e)
{
cout << e << endl;
}
system("pause");
return 0;
}
Díky za radu.