#include <iostream>
using namespace std;

class A
{
public:
	A( int a )
		: _a(a)
		{ cerr << "A::A(" << _a << ")" << endl; }
	~A()
		{ cerr << "A::~A(" << _a << ")" << endl; }
		
private:
	int _a;
};

int f( int x )
{
	A a(x);
	A* p = new A(100+x);
	if( x<0 )
		throw "Parametar funkcije f je manji od 0!";
	if( x>3)
		throw x;
	delete p;
	return x * x;
}

void g( int a, int b)
{
	for( int i=a; i<=b; i++ ){
		try	{
			int y = f(i);
			cout << "f(" << i << ") = " << y << endl;
		}catch( char* s ){
			cerr << "GRESKA: " << s << endl;
		}
	}
}

main()
{
	cout << "pocetak" << endl;
	try	{
		g( -1, 5 );
	}catch(...){
		cerr << "Nepoznata greska!" << endl;
	}
	cout << "kraj" << endl;
	return 1;
}

/*
pocetak
A::A(-1)
A::A(99)
A::~A(-1)
GRESKA: Parametar funkcije f je manji od 0!
A::A(0)
A::A(100)
A::~A(100)
A::~A(0)
f(0) = 0
A::A(1)
A::A(101)
A::~A(101)
A::~A(1)
f(1) = 1
A::A(2)
A::A(102)
A::~A(102)
A::~A(2)
f(2) = 4
A::A(3)
A::A(103)
A::~A(103)
A::~A(3)
f(3) = 9
A::A(4)
A::A(104)
A::~A(4)
Nepoznata greska!
kraj

*/