|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
..genero 2 numeri casuali in rand poi per copiarli l'uno sull'altro come faccio???
ragazzi ho da fare questo tipo di esercizio...dato un mazzetto di carte napoletane ordinato generare 1 coppia di carte e scambiarle l'una con l'altra....
ho creato uan struct carta: struct carta { int valore; char seme[8]; }; //definizione mazzetto ordinato struct carta mazzetto[]={ {1,"bastoni"},{2,"bastoni"},{3,"bastoni"},{4,"bastoni"},{5,"bastoni"}, {6,"bastoni"},{7,"bastoni"},{8,"bastoni"},{9,"bastoni"},{10,"bastoni"}, {1,"coppe"},{2,"coppe"},{3,"coppe"},{4,"coppe"},{5,"coppe"}, {6,"coppe"},{7,"coppe"},{8,"coppe"},{9,"coppe"},{10,"coppe"}, {1,"denari"},{2,"denari"},{3,"denari"},{4,"denari"},{5,"denari"}, {6,"denari"},{7,"denari"},{8,"denari"},{9,"denari"},{10,"denari"}, {1,"spade"},{2,"spade"},{3,"spade"},{4,"spade"},{5,"spade"}, {6,"spade"},{7,"spade"},{8,"spade"},{9,"spade"},{10,"spade"};} ho estratto con la rand 2 carte casuali: //generazione due carte a caso for (i=1;i<=2;i++) { nc=rand()%41; } ora ho necessità di copiare nella posizione della prima carta la seconda e viceversa....insomma vojo stampare il mazzetto non più in modo ordinato ma con il cambio delle 2 carte generate a caso.... come posso fare???
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
int idx1, idx2; struct carta tmp; srand ((unsigned int) time (NULL)); idx1 = rand () % 40; idx2 = rand () % 40; tmp = mazzetto[idx1]; mazzetto[idx1] = mazzetto[idx2]; mazzetto[idx2] = tmp; a) Visto che hai 40 carte, gli indici vanno da 0 a 39 (per quello % 40 e non % 41). b) Alla fine dell'array devi mettere ....{10,"spade"}}; c) L'operazione di modulo sul valore di rand() non offre una ottima pseudo-casualità (leggi <qui>).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2005
Città: Ahimè..Bs ----------------------------------- Messaggi tot: 1000+
Messaggi: 772
|
ti memorizzi i 2 "indici" delle carte da scambiare.
copi mazzetto[primoindice] in una temporanea. incolli mazzetto[secondoindice] in mazzetto[primoindice] e incolli la temporanea in mazzetto[secondoindice]... sono un cane nella sintassi del c/c++ ma... quando dichiari il mazzetto mi sembra che tu non debba mettere struct in quanto "carta" è già un """""tipo di dato"""" caratterizzato dalla struttura
__________________
11/2006-Inspiron6400 -t7200|2GB@533MHz|S-ATA 80gb@7200rpm|Ati X1400|9cell Battery||garanzia 3 anni On-Site NBD ex: Toshiba M30-154 (PERCHE' NON COMPRARE TOSHIBA..LEGGI QUI) + P4 2.8@3,2GHz 1MB L2, Gigabyte 915p-duo,1GB DDR400 DualCh, gF 6600gt 128MB GDDR3 + Canon Ixus50 + Creative Muvo^2 1.5GB |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
Quote:
cioè tu dici così??? nc=rand()%40; nc1=rand()%40; swap=mazzetto[nc]; mazzetto[nc]=mazzetto[nc1]; mazzetto[nc1]=swap; mi da un incompatibilità di types (swap=mazzetto[nc]
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
Quote:
a parte questi errori....che già avev notato io...così com ho impostato io lo struct non va bene??? nn riesco a salvare in una variabile d'appoggio(swap) "mazzetto[nc]" perkè mi da incompatibilità di type...coem devo impostare swap?int??
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
Quote:
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
Quote:
ora vedo ke capita anke ke mi generi casualmente 2 carte uguali...come poso evitare ke succeda questo???con un if??? bhe ora...dato ke devo stampare il mazzo di carte miskiato...(io prima tramite ciclo for ho impostato il numero di miskiate ke vojo fare...ad ogni miskiata ovviamente corrisponde lo scambio di 2 carte...)....come faccio???
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
idx1 = rand () % 40;
do {
idx2 = rand () % 40;
} while (idx2 == idx1);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
Quote:
{ nc=rand()%40; nc1=rand()%40; if (nc!=nc1) {...qui poi faccio l'operazione di swap} ora ovviamente devo stampare il mazzetto miskiato.....tramite for immagino...ma come??? p.s. in ogni caso grzie per la gentile cortesia e l'attenzione ke mi stai dedicando...
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Un'altra soluzione per mischiare le carte e non avere problemi di indici doppi, è la seguente (mi baso sulla tua struttura del mazzo):
Codice:
....
int rand_int (int min, int max)
{
double d;
d = rand () / (RAND_MAX+1.0);
return ((int) (d * (max-min+1))) + min;
}
...
int i, idx1, idx2;
struct carta tmp;
srand ((unsigned int) time (NULL));
for (i = 0; i < 39; i++)
{
idx1 = i;
idx2 = rand_int (i+1, 39);
tmp = mazzetto[idx1];
mazzetto[idx1] = mazzetto[idx2];
mazzetto[idx2] = tmp;
}
L'algoritmo di mescolamento è semplice: la prima carta la scambio con una delle altre 39, la seconda la scambio con una delle altre 38, e così via. In questo modo nessuna carta sarà più al suo "posto" originale.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Codice:
for (i = 0; i < 40; i++)
{
printf ("%d di %s\n", mazzetto[i].valore, mazzetto[i].seme);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2005
Città: NAPOLI
Messaggi: 648
|
ho finito il programma....
permettimi di correggerti ma nel for di cui sopra i parametri il parametro ke cvaria non è "i", ma "nc",quindi for(nc=0;nc<40;nc++) e ovviamente la printf mi dovrà scrivere questi 2 valori...mazzetto[nc].valore,mazzetto[nc].seme tutto nel ciclo for così da generarmi il mazzetto miskiato... di seguito metterò tutto il programma, così se a qyualcuno in futuro potrà serivire lo trova qui... #include<stdio.h> #include<stdlib.h> #include <time.h> int main() { int j,n,nc,nc1,i; struct carta //crea una struct di tipo carta { int valore; char seme[8]; }; struct carta swap;/* di tipo carta riferita alla variabile swap (N.B. se la var. swap la si inizializzasse di tipo intovviamente questa genererebbe un errore durante l'assegnazione dello swap nella riga 43 perche le 2 variabili a quel punto risulterebbero di diverso tipo*/ //definizione mazzetto ordinato struct carta mazzetto[]={ {1,"bastoni"},{2,"bastoni"},{3,"bastoni"},{4,"bastoni"},{5,"bastoni"}, {6,"bastoni"},{7,"bastoni"},{8,"bastoni"},{9,"bastoni"},{10,"bastoni"}, {1,"coppe"},{2,"coppe"},{3,"coppe"},{4,"coppe"},{5,"coppe"}, {6,"coppe"},{7,"coppe"},{8,"coppe"},{9,"coppe"},{10,"coppe"}, {1,"denari"},{2,"denari"},{3,"denari"},{4,"denari"},{5,"denari"}, {6,"denari"},{7,"denari"},{8,"denari"},{9,"denari"},{10,"denari"}, {1,"spade"},{2,"spade"},{3,"spade"},{4,"spade"},{5,"spade"}, {6,"spade"},{7,"spade"},{8,"spade"},{9,"spade"},{10,"spade"} }; //stampa mazzetto ordinato for (i=0;i<40;i++) {printf ("%d di %s\n",mazzetto[i].valore,mazzetto[i].seme);}; //immettere il numero di smazzate che si vuole fare printf("\nscrivere quante smazzate si vogliono fare: "); scanf("%d",&n); printf("\n"); //la srand ci genererà parametri casuali tramite la funzione rand sempre diversi, esa è legata all'orario srand(time(NULL)); //ciclo for che effettua il numero di smazzate (N.B. ad una smazzata corrisponde uno scambio tra 2 carte) for (j=0;j<=n-1;j++) { nc=rand()%40;//generazione primo numero casuale nc1=rand()%40;//generazione secondo numero casuale //costrutto if che farà in modo danon generare due indici casuali uguali if (nc!=nc1) { //effettua lo scambio usando una variabile d'appoggio swap swap=mazzetto[nc]; mazzetto[nc]=mazzetto[nc1]; mazzetto[nc1]=swap; //stampa scambi avvenuti printf("gli scambi avvenuti sono: %d di %s con %d di %s\n", mazzetto[nc].valore,mazzetto[nc].seme,mazzetto[nc1].valore,mazzetto[nc1].seme); } } printf("\n\nil mazzetto dopo aver effettuato %d smazzate e':\n\n",n); //ciclo for che mi stamperà il mazzetto di 40 carte dopo aver effettuato un numero da noi deciso di smazzate for (nc=0;nc<40;nc++) printf("%d di %s\n",mazzetto[nc].valore,mazzetto[nc].seme); }
__________________
O'Napule dint'o'core.......... -MacBook 2,26 GHz Intel Core 2 Duo - 4 GB DDR3 -IPhone 3GS 16 GB -Ipad wifi+3g 64gb |
|
|
|
|
|
#15 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Io ho fatto solo degli esempi di codice .... poi le variabil chiamale come ti pare. Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
||
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Oppure ti estrai gli indici da scambiare in questo modo:
Codice:
idx1 = rand() % 40; idx2 = rand() % 39; if(idx2 >= idx1) idx2++; |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:08.



















