Witam!
Mam taki problem z programem:

 

#include <iostream>

using namespace std;

int nwd(int a, int b)
{
		while(a!=b)
	{
	
		if(a>b)
			a-=b;
		else
			b-=a;
	}
	
	return a;
	
}

int nww(int mian1, int mian2, int nwd1)
{
	
	return mian1*mian2/nwd1;
	
}

class Ulamek
{
	
	public:
	int licznik;
	int mianownik;
	
	Ulamek(int liczn,int mianow);
	Ulamek();
	double wartosc();
	void drukuj();
	void dodaj(Ulamek u);
	void dodaj(int liczba);
	
	
};

Ulamek::Ulamek(int liczn, int mianow)
{
	
licznik = liczn;
mianownik = mianow;


}

Ulamek::Ulamek()
{
	cout << endl;
	cout << "Podaj wartosc licznika:";
	cin >> licznik;
	
	cout << "Podaj wartosc mianownika:";
	cin >> mianownik;
	
	while(mianownik==0)
	{
		cout << endl;
		cout << "Podaj mianownik rozny od zera!";
		cin >> mianownik;
		
	};
	
}

double Ulamek::wartosc()
{
	
return (double)licznik/mianownik;
	
}

void Ulamek::drukuj()
{
	
cout << endl;
cout << licznik <<" / "<<mianownik <<" = "<< wartosc();	
	
}

void Ulamek::dodaj(Ulamek u)
{

int temp = mianownik;	

int nwd1 = nwd(mianownik,u.mianownik);
int nww1 = nww(mianownik,u.mianownik,nwd1);	
			
mianownik = nww1;

licznik = (nww1/temp) *licznik;
u.licznik = (nww1/u.mianownik) *u.licznik;
	
licznik = licznik + u.licznik;
	
}

void Ulamek::dodaj(int liczba)
{

int licznik1;
int mianownik1;

mianownik1 = mianownik;
licznik1 = mianownik1* liczba;

licznik = licznik+licznik1;
	
	
}

int main()
{
	Ulamek a(3,5);
	Ulamek b;
	a.drukuj();
	b.drukuj();
	a.dodaj(b);
	a.drukuj();
	a.dodaj(3);
	a.drukuj();
	
	
	return 0;
} 

Tutaj screen:
http://www.fotosik.pl/zdjecie/a5bfd7cdd0d9c713

Chodzi mi dokładnie o to, że w operacji dodawania ułamka z ułamkiem nadpisuje mi licznik i mianownik i potem jak dodaje ułamek z liczbą wychodzi zły wynik.

Z góry dzięki!