View Full Version : Sono nuovo
Vandred88
09-03-2005, 13:46
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.
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
Vandred88
09-03-2005, 14:53
io sono di Empoli, e fo l'ITI Leonardo Da Vinci a Firenze
Vandred88
09-03-2005, 15:47
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++;
}
}
}
}
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:
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];
}
}
considera tuttavia che l'evenienza che rand estragga due volte consecutive lo stesso numero è praticamente impossibile.
Vandred88
09-03-2005, 19:08
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??
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.