|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2005
Città: Empoli
Messaggi: 45
|
Sono nuovo
salve a tutti, sono nuovo in questo forum, e volevo chiedervi un'aiuto
premetto ke di c++ nn so molto, ma le basi si. io x scuola ho da fare il gioco mastermind, xò non riesco a fare una piccola cosa. allora io ho un vettore di 6 colori e li devo inserire all'interno di una matrice con 4 colonne in modo casuale, senza xò avere colori uguali. io sono riuscito a metterli in modo casuale, ma alcune volte succede di avere due o + colori identici e questo è sbagliato. es: vett[7]={'G','R','B','V','A','M'}; ed all'interno dell'ultima riga della matrice ci dovrebbe essere la soluzione del gioco con i colori del vettore in modo casuale tutti diversi. tipo soluzione = ARVM voi come fareste?? grazie a tutti. |
![]() |
![]() |
![]() |
#2 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
le lettere sono in tutto 6, e ne devi scegliere 4, fondamentalmente il problema è questo, ho capito bene?
allora estrai due indici a caso diversi tra loro compresi tra 0 e 6 (inclusi) e quelli sono i due che hai escluso; poi con un ciclo visita tutto il vettore contenente i 6 elementi e ad ogni iterazione gli dici una cosa del tipo "se l'indice corrente è diverso dai due estratti a caso, mettilo nella matrice finale". PS: x curiosità che scuola fai? e in che città? ![]() ciao |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2005
Città: Empoli
Messaggi: 45
|
io sono di Empoli, e fo l'ITI Leonardo Da Vinci a Firenze
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Mar 2005
Città: Empoli
Messaggi: 45
|
intendi in questa maniera???
void soluzione(char mat[][8],char vett[6]) { int x, y, c=0; x=rand()%7; y=rand()%7; if(x!=y) { for(int i=0; i<6; i++) { if(i!=x && i!=y) { if(c<=4) { mat[8][c]=vett[i]; c++; } } } } |
![]() |
![]() |
![]() |
#5 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
si, ma naturalmente il controllo sulla variabile c è superfluo.
ah, cmq c'è un errore nel for: tu conti da 0 a 5, mentre dovresti contare da 0 a 6; inoltre ti consiglio di reagire in altra maniera se x caso i due numeri estratti sono uguali; te lo riscrivo come lo farei io: Codice:
char v[7] = "GRBVAM"; char mat[4]; int x, y, i, j = 0; srand(time(NULL)); x = rand() % 7; do { y = rand() % 7; } while (x == y); for (i = 0; i < 7; i++) { if ((i != x) && (i != y)) { mat[j] = v[i]; } } |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Mar 2005
Città: Empoli
Messaggi: 45
|
grazie, cmq nn capisco xke il controllo su c sia superfluo...
e poi nn capisco anche un'altra cosa ke ho fatto io.. Questo do - while dentro al main. do { carica(mat,r); confronta(mat,r); stampa(mat,r); vittoria(mat,r,win); r++; } while(win==0); r=0; cout<<"\nAltra partita S/N?"; ......................................................... questo per ora sarebbe la funzione vittoria che controlla se ci sono elementi uguali o no. se tutti sono uguali vinco e ritorna il valore =1; altrimenti continuo facendo ritornare il valore win=0; int vittoria(char mat[][8],int r,int win) { for(int c=5; c<8; c++) { if(mat[r][4]==mat[r][c]) win=1; else win=0; } if(win==1) { cout<<"***HAI VINTO!!***\n"; return win=1; } else return win=0; } cioè di logica quando ritorna il valore win=1 dovrei uscire dal do-while ke è dentro il main e chiedere se voglio fare un'altra partita ... ma cosi nn avviene xke?? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:37.