Losowanie karty

0
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
#include <cstdio>

using namespace std;

//globalne
int kolory[4] = {1,2,3,4};
string figury[13] = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
int potasowane[52];
int kolor;
string figura;

int losuj()
{
	return (rand() % 52)+1;
}
bool czy_potasowana(int ile, int karta)
{
	cout << "czy_potasowana("<<ile<<","<<karta<<")"<<endl;
	if(ile <=0)
		return false;
	int x = 0;
	do
	{
		if(potasowane[x] == karta)
			return true;
		x++;
	} while (x<ile);
	return false;

}
		
void tasowanie()
{
	
	int ktora = 0;
	int ktory_kolor = 0;
	int wylosowana_karta = losuj();
	cout << "wylosowana_karta = " << wylosowana_karta << endl;
	do
	{
		
		if( czy_potasowana(ktora, wylosowana_karta) == false)
		{	
			potasowane[ktora] = wylosowana_karta;	
			ktora++;
		}
		
	} while (ktora<52);
}

int main()
{
	srand(time(NULL));
	cout << "Potasowana talia:" << endl;
	tasowanie();
	int i = 0;
	do
	{
		cout << i << " -> " << potasowane[i] << endl;
		i++;
	} while (i<52);
	
}

Dlaczego to się ciągle powtarza?
20371495350c483c33437e.png

0

Losujesz tylko raz, jeżeli wylosowana karta już jest w talii to czy_potasowana() zwraca true i w kółko wywołujesz to samo z tą samą kartą.
Losować radzę w zakresie 0..51 aby ułatwić sobie określenie koloru i karty.
Tasowanie całej talii zrób tak:
for(int i=0;i<52;++i) potasowane[i]=i;
for(int i=51;i>0;--i) { int p=rand(i+1),x=potasowane[p]; potasowane[p]=potasowane[i]; potasowane[i]=x; }

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