Io ho fatto adesso questo programma di esempio:
codice:
enum e_seme {
picche = 0,
fiori = 1,
cuori = 2,
quadri = 3
};
class carta
{
public:
e_seme seme;
unsigned int valore;
};
void mescola(carta mazzo[], int numero, int sicurezza = 500);
void mostra(carta mazzo[], int numero);
void main()
{
carta mazzo[52];
int i,j;
// Inizializza i valori
for(i=0; i<4; i++)
{
for(j=0; j<13; j++)
{
mazzo[i * 13 + j].seme = (e_seme) i;
mazzo[i * 13 + j].valore = j + 1;
}
}
mostra(mazzo,52);
mescola(mazzo,52);
cout << "\n\n\n\n\nMescolamento:\n\n\n\n\n\n\n";
mostra(mazzo,52);
}
void mostra(carta mazzo[], int numero)
{
int i;
int p=0,f=0,c=0,q=0;
for(i=0; i<numero; i++)
{
cout << "Carta numero " << mazzo[i].valore << " di seme ";
switch(mazzo[i].seme)
{
case 0:
cout << "picche";
p++;
break;
case 1:
cout << "fiori";
f++;
break;
case 2:
cout << "cuori";
c++;
break;
case 3:
cout << "quadri";
q++;
break;
}
cout << ".\n";
}
cout << "Totale: " << p << " picche, " << f << " fiori, " << c << " cuori e " << q << "quadri.\n";
}
void mescola(carta mazzo[], int numero, int sicurezza)
{
srand(numero * mazzo[0].valore * sicurezza % 30000);
int i, pos1, pos2;
carta initval;
// Trovo la carta iniziale a caso
pos1 = rand() % numero + 1;
// Memorizzo il suo valore
initval = mazzo[pos1];
for(i=0; i < sicurezza; i++)
{
// Trovo un' altra carta a caso
do {
pos2 = rand() % numero + 1;
// Diversa da quella di prima
} while(pos2 == pos1);
// Metto il valore dei questa carta nella carta di prima
mazzo[pos1] = mazzo[pos2];
// Ora questa è la carta 'vecchia'
pos1 = pos2;
}
// Metto nell'ultima carta il valore della prima
mazzo[pos1] = initval;
}