Ciao ragazzi sto completando il codice di un gioco di tombola, eseguendo il codice, mi sono accorto che quando vado a stampare i risultati avviene un errore di stampa, ovvero esempio di stampa:
36// numero estratto
48 // numero estratto
giocatore ( i-esimo ) ha fatto ambo,
ma andando a verificare sulle cartelle i numeri che sono stati estratti non danno una vincita
e ciò mi ha spinto a capire che il numero che permette l' ambo non è visualizzato
un ulteriore esempio è:
85 // numero estratto
giocatore 1 ha fatto ambo
giocatore 3 ha fatto terno
giocatore 2 h fatto quaterna
vi posto il codice per aiutarmi a capire come posso porre rimedio:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int rnd ,pos_riga, ambo=0, terno=0, quaterna=0, quintina=0, tombola=0, estratto;
int CB[4][9],G1[4][10],G2[4][10],G3[4][10],G4[4][10],G5[4][10],TAB[90];
void controllo()
{
int i,j;
int col=10;
int rig=3;
for (i=0; i<3; i++) {
for (j=0; j<col; j++) {
if (G1[i][j] == estratto) { G1[i][col] += 1; }
if (G2[i][j] == estratto) { G2[i][col] += 1; }
if (G3[i][j] == estratto) { G3[i][col] += 1; }
if (G4[i][j] == estratto) { G4[i][col] += 1; }
if (G5[i][j] == estratto) { G5[i][col] += 1; }
}
}
//Controllo ambo
if (ambo==0) {
for (i=0; i<3; i++) {
if (G1[i][col] == 2) {printf("\nIl giocatore 1 ha fatto ambo!\n");}
if (G2[i][col] == 2) {printf("\nIl giocatore 2 ha fatto ambo!\n");}
if (G3[i][col] == 2) {printf("\nIl giocatore 3 ha fatto ambo!\n");}
if (G4[i][col] == 2) {printf("\nIl giocatore 4 ha fatto ambo!\n");}
if (G5[i][col] == 2) {printf("\nIl giocatore 5 ha fatto ambo!\n");}
if ((G1[i][col] == 2) || (G2[i][col] == 2) || (G3[i][col] == 2 ) || (G4[i][col] == 2) || ( G5[i][col] == 2)) {ambo = 1;}
}
}
//Controllo terno
if (ambo == 1 && terno==0) {
for (i=0; i<3; i++) {
if (G1[i][col] == 3) {printf("\nIl giocatore 1 ha fatto terno!\n");}
if (G2[i][col] == 3) {printf("\nIl giocatore 2 ha fatto terno!\n");}
if (G3[i][col] == 3) {printf("\nIl giocatore 3 ha fatto terno!\n");}
if (G4[i][col] == 3) {printf("\nIl giocatore 4 ha fatto terno!\n");}
if (G5[i][col] == 3) {printf("\nIl giocatore 5 ha fatto terno!\n");}
if ((G1[i][col] == 3) || (G2[i][col] == 3) || (G3[i][col] == 3 ) || (G4[i][col] == 3) || ( G5[i][col] == 3)) {terno = 1;}
}
}
//Controllo quaterna
if (terno == 1 && quaterna==0) {
for (i=0; i<3; i++) {
if (G1[i][col] == 4) {printf("\nIl giocatore 1 ha fatto quaterna!\n");}
if (G2[i][col] == 4) {printf("\nIl giocatore 2 ha fatto quaterna!\n");}
if (G3[i][col] == 4) {printf("\nIl giocatore 3 ha fatto quaterna!\n");}
if (G4[i][col] == 4) {printf("\nIl giocatore 4 ha fatto quaterna!\n");}
if (G5[i][col] == 4) {printf("\nIl giocatore 5 ha fatto quaterna!\n");}
if ((G1[i][col] == 4) || (G2[i][col] == 4) || (G3[i][col] == 4 ) || (G4[i][col] == 4) || ( G5[i][col] == 4)) {quaterna = 1; }
}
}
//Controllo quintina
if (quaterna == 1 && quintina == 0) {
for (i=0; i<3; i++) {
if (G1[i][col] == 5) {printf("\nIl giocatore 1 ha fatto quintina!\n");}
if (G2[i][col] == 5) {printf("\nIl giocatore 2 ha fatto quintina!\n");}
if (G3[i][col] == 5) {printf("\nIl giocatore 3 ha fatto quintina!\n");}
if (G4[i][col] == 5) {printf("\nIl giocatore 4 ha fatto quintina!\n");}
if (G5[i][col] == 5) {printf("\nIl giocatore 5 ha fatto quintina!\n");}
if ((G1[i][col] == 5) || (G2[i][col] == 5) || (G3[i][col] == 5) || (G4[i][col] == 5) || ( G5[i][col] == 5)) {quintina = 1;}
}
}
}
int estrazione()
{
void controllo();
int rnd;
rnd = rand()%90; //genero un numero nuovo fino a quando non è stato estratto
if (TAB[rnd] == 0) return 0; else {
estratto = TAB[rnd];
printf("%d ",estratto);
getchar(); }
controllo();
}
int massimo_per_riga() { // funzione che controlla se nella riga ci sono 5 valori , in caso positivo restituisce true , altrimenti false
int i, cont=0;
for (i=0; i<9; i++) {
if (CB[pos_riga][i] != 0) cont++;
}
if (cont == 5) return 1;
else return 0;
}
int pieno(int appoggio) { // Se ci sono due valori diversi da 0 nella colonna appoggio allora restituisce true alrimenti false
int i, cont=0;
for (i = 0; i<3; i++) {
if (CB[i][appoggio] != 0) cont++;
}
if (cont == 2) return 1;
else return 0;
}
int inserisci (int appoggio) {
int i;
int continuo=1;
if (pieno(appoggio)) // se nella colonna ci sono già due valori allora false diretto
return 0;
else {
for (i = 0; i<3; i++) { // controllo se esiste il valore nella colonna indicata da appoggio
if (CB[i][appoggio] == rnd)
return 0;
} // se finisce il for significa che non esiste il valore rnd nella colonna appoggio
while (continuo) { // va a prendere la posizione della riga in cui non c'è già un valore nella colonna
pos_riga = rand()%3; // la riga deve essere casuale , almeno così è dall' immagine che mi hai dato
if (CB[pos_riga][appoggio] == 0)
break;
}
if (!massimo_per_riga()) return 1;
else return 0;
}
}
void genera() {
int i, j, appoggio;
for (i=0; i<3; i++) {
for (j=0; j<9; j++) {
CB[i][j]=0;}}
for (i=0; i<15; i++) { // 15 sta per quanti numeri devono essere inseriti nella matrice
rnd = 1+(rand()%90); // genera da 1 a 90
appoggio = (rnd-1)/10; // indicherà la colonna
if (appoggio == 9) appoggio = 8; // se il numero è 90 deve stare nella colonna 8
if (!inserisci(appoggio)) i--; // se non è stato inserito ripeti il ciclo
else {
CB[pos_riga][appoggio] = rnd;
}
}
}
int main () {
srand(time(NULL));
int i,j;
for (i=1; i<= 90; i++) TAB[i] = i;
genera();
printf("\nGiocatore 1:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G1[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G1[i][j] == 0) printf("\t"); else printf("%d\t",G1[i][j]); }}
genera();
printf("\nGiocatore 2:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G2[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G2[i][j] == 0) printf("\t"); else printf("%d\t",G2[i][j]); }}
genera();
printf("\nGiocatore 3:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G3[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G3[i][j] == 0) printf("\t"); else printf("%d\t",G3[i][j]); }}
genera();
printf("\nGiocatore 4:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G4[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G4[i][j] == 0) printf("\t"); else printf("%d\t",G4[i][j]); }}
genera();
printf("\nGiocatore 5:\n");
for (i=0; i<3; i++){ for (j=0; j<9; j++){G5[i][j] = CB[i][j]; }}
for (i=0; i<3; i++){ printf("\n\n"); for (j=0; j<9; j++){if (G5[i][j] == 0) printf("\t"); else printf("%d\t",G5[i][j]); }}
getchar();
printf("\n");
do estrazione(); while (tombola == 0);
if (tombola==1) printf("\nTombola!!\nPremere un tasto per finire.");
getchar();
return 0 ;
}
Vorrei inoltre chiedervi, come posso far in modo che vendano estratti i novanta numeri casualmente senza ripetizione? esiste una specifica formula che posso applicare nel rand, oppure che ne dite, se costruisco un array ordinato da 1 a 90 e vi accedo casualmente, cancellando a ogni passo i numeri estratti? fatemi sapere