Oppure

Loading
09/12/09 18:56
crack001
salve a tutti, sto facendo un programma per un gioco di carte, e ho il seguente problema...io utilizzo un mazzo di carte francesci, quindi 52 carte con 4 semi, 13 carte per ogni seme. Utilizzo 2 Array, e supponendo che il mazzo sia nuovo quindi appena comprato, ho in sequenza 13 carte del primo seme seguite da 13 carte del secondo e cosi via...ora dovrei mescolare questo mazzo...il problema è questo!!!

cioè io devo lavorare su 2 array, per ogni atto di mescolazione, io devo memorizzare oltre alla carta del primo vettore anche il seme che si trova nel secondo vettore, dato che la carta io la trovo usando parallelamente i 2 vettori, mi spiego meglio:

carta   seme
1	1
2	1
3	1
4	1
5	1
6	1
7	1
8	1
9	1
10	1
11	1
12	1
13	1
1	2
2	2
e cosi via


chi di voi mi da una mano??? se dovevo mescolare 1 solo vettore utilizzavo la funzione random e risolvevo tutto in 5 minuti ma qui devo lavorare su 2 vettori, come fare???

aaa
09/12/09 19:00
crack001
ops chiedo scusa ho sbagliato sezione!!! kiedo gentilmente ad 1 moderatore di cambiare la sezione al topic -.- mi scuso ma sto fuso XD
aaa
09/12/09 22:44
ingMark
Immagino che tu ancora non abbia sentito parlare di struct :)
Col presupposto che non sai/puoi usarle ecco la domanda che mi farei sul tuo problema.

-Devo per forza tenere anche il mazzo di carte ordinato?

A meno che non sia una specifica dell'esercizio, la risposta secondo me è no.
Mi sembra anche un'informazione abbastanza inutile visto che sai benissimo come è fatto un mazzo di carte ordinato.
Inoltre anche se dovessi rimescolarlo più volte, non perdi nessuna informazione se il tuo programma non sa come è fatto un mazzo di carte ordinato.

Mi spiego meglio. Anche nella realtà, dopo che hai giocato una partita a carte e devi rimischiare il mazzo non lo riporti alla forma originale (con tutte le carte ordinate per numero e per seme) e poi le rimischi :k:

Quindi in definitiva se l'esercizio non ti chiede di tenere l'informazione sul mazzo di carte iniziale puoi riutilizzare quei due vettori, scambiando ogni volta le posizioni di due carte.

Se invece l'esercizio ti chiedesse di tenere anche l'informazione sul mazzo di carte iniziale, allora come usi due vettori per memorizzare l'informazione originale, dovresti usarne due (e tenerli sempre paralleli) anche per il mazzo di carte mischiato.

Poi puoi benissimo cercare di ottimizzare il tutto.
Una possibile soluzione che mi viene in mente, potrebbe essere usare solo 3 vettori invece che 4.
Questo perchè nel mazzo iniziale tu sai per certo che le prime 13 carte sono del seme 1, le seconde 13 carte sono del seme 2 etc etc, e quindi l'informazione del seme è superflua.
Quando il mazzo è mischiato invece ne hai bisogno :k:
aaa
10/12/09 10:34
crack001
si appunto, l'esercizio vuole ke all'inizio il mazzo di carte sia NUOVO, e poi deve partire la funzione che mescola il mazzo, xo siccome io ho 2 vettori, uno di carte e uno di semi, quando mescolo il mazzo io li devo mantene ordinati tutti e 2, cioè metti che il mio vettore è:

1 2
2 2
3 1
4 4

pensa a questo come un piccolo mazzo di 4 carte miskiato, se io lo mescolo nuovamente ottengo

1 2
4 4
2 2
3 1

capito cosa intendo??? se dovevo giocare solo su 1 vettore la cosa era facile spostavo 2 carte per volta usando una variabile temporanea a via...ma qui devo memorizzare 2 vettori, come faccio? qualcuno di voi che mi illustra tutto con un semplice algoritmo??? ne ho trovate di soluzioni in rete ma sono solo ed esclusivamente per 1 vettore...cioè altre funzioni per mescolare carte non vanno ad influire sul vettore del seme
aaa
10/12/09 12:14
ingMark
se sai come ordinare un vettore perchè non puoi ordinarne due assieme? 8-|

questo è quello che faresti con un solo vettore
for(i = 0; i< lungvett; i++)
{   
   ottieni_indici_casuali(&indice1, &indice2); //questo decidi poi tu come farlo
   scambia(vett, indice1, indice2); //come sopra
}


ora una volta che sai questo il passo è breve!
Se le due informazioni (numero e seme) devono sempre essere abbinate, ti basta scambiare gli elementi con lo stesso indice anche sul secondo vettore

for(i = 0; i< lungvett; i++)
{
   ottieni_indici_casuali(&indice1, &indice2); //questo decidi poi tu come farlo
   scambia(vett_numeri, indice1, indice2); //come sopra
   scambia(vett_semi, indice1, indice2);
}


Devi solo ripetere l'operazione di scambio, con gli stessi indici
aaa
10/12/09 22:06
crack001
grande, avevo perfettamente ragione, l'unica cosa è che tu nella funziona richiami una funzione di scambio etc, solo ke la mia funzione di scambio mi dava un problema con degli errori, quindi l'ho fatto senza funzione ma è la stessa cosa...se ho problemi pubblico un nuovo post nella sezione giusta questa volta...grazie mille (postero sicuramente)
aaa