Shuffling algorithm

0

Witam
Mam kłopot ze zwróceniem całej tablicy z funkcji.
Oto kod:

class tasowanie
{
public:
	tasowanie();
	int *shuffle();
	
	void show();
private:
	static const int ilosc=52;
	int *tab;
};
tasowanie::tasowanie()
{
	
	for(int i=0;i<ilosc;i++)
		tab[i]=i;
}
int tasowanie::shuffle()
{
	tab=new int[ilosc];
	for(int i=ilosc-1;i<0;i--)
	{
		int j= rand()%(i+1);
		int tmp=tab[j];
		tab[j]=tab[i];
		tab[i]=tmp;
	}
	delete []tab;
	return tab;
}

void tasowanie::show()
{
	for(int i=0;i<ilosc;i++)
		cout<<tab[i]<<" ";
	cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
	srand(time(0));
	tasowanie();
	tasowanie t;
	t.show();
	t.shuffle();
	t.show();
	system("PAUSE");
	return 0;
}
 

Próbowałem coś z alokacją pamięci, lecz nie wiem czy robię to dobrze. Dodam, że program w takiej formie się nie kompiluje.
Z góry dziękuje za odpowiedź.
PS: Wiem, że można to napisać za pomocą vectorów STLa, ale nie chce na razie się dotykać do STLa.

1

int *tasowanie::shuffle()

A może zrób to po ludzku, coś w stylu: http://ideone.com/t5SHk2

0

dodaj kod ktory sie kompiluje

w kontsturkorze przypisujesz juz cos do tablicy a nadal ona nie jest utworzona.

0

Dziękuje za odpowiedź.
Przeanalizowałem kod który mi wysłałeś 13th_Dragon i go rozumiem, lecz mam kilka pytań.
1)Widzę, że przeciążasz operator <<. Nie rozumiem tylko dlaczego się to robi. Poczytałem trochę i dowiedziałem się , że jeżeli się tego nie zrobi to kompilator "wariuje".
2)Nie rozumiem dlaczego właśnie & stoi przed shuffle a nie *??
3) *this zwraca referencję z danego obiektu czyli zwraca tablice czy dobrze rozumiem?
4) linijki t.shuffle(); i cout<<t<<endl; podałeś żeby mi pokazać jak zmienia się konstruktor domyślny??:). Pytam bo tasowanie wykonałeś dwa razy.

Z gory dziękuje za pomoc.

1

Ad.1. Aby móc wyświetlić tak: cout<<t<<endl;
Ad.2. Ponieważ szufle() zwraca referencje na tasowanie aby móc zrobić tak: cout<<t.shuffle()<<endl;
Ad.3. ... czyli zwraca obiekt tasowanie
Ad.4. Aby pokazać że nie musisz zwracać tablicy.

Tak a propos:
http://www.cplusplus.com/reference/algorithm/shuffle/

array<int,52> tb;
for(int i=0;i<52;++i) tb[i]=i;
shuffle (tb.begin(),tb.end(),default_random_engine(chrono::system_clock::now().time_since_epoch().count()));
0

Dziękuje!

1 użytkowników online, w tym zalogowanych: 0, gości: 1