Devil_Dante90 ha scritto:
Scusatemi l'intromissione ma è per capire una cosa mia..
Nel codice al FOR dove viene controllato il tabellone e quando trova il numero estratto lo sostituisce con 0, invece di riutilizzare altri FOR successivamente per riscorrere la matrice non si può direttamente scorrere la matrice per righe invece che per colonne e con un controllo incrementare già la variabile per vedere se è stato fatto ambo o più?
se è una cavolata scusatemi per quello che ho chiesto
Infatti è inutile fare un for in più, ma anche così, il gioco non è completo, gli ambi, terni ecc, si devono controllare anche sulle schede che vengono distribuite ai partecipanti.
@ cslash89
Anche se cancelli tutti i numeri usciti dal tabellone, devi ancora fare altro lavoro.
Il tuo codice con qualche ottimizzazione e consiglio, ma altro si può fare.
#include <iostream>
#include <time.h>
#include <iomanip>
#include <conio.h>
using namespace std;
// Vettore che contiene i nomi dei risultati, il conteggio degli zeri sarà usato come indice
const string nomi[]={" ", "singolo ","ambo ","terno ","quaterna","cinquina"};
int main(){
int r=9, c=10, estrazione[89]={0}, contaestratti=0, contazeririga=0, n=0;
char risp;
int tabellone[r][c];
//CARICO E STAMPO LA MATRICE // inutile, la riempi dopo con i numeri progressivi
/* for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
tabellone[i][j]=0;
}
}*/
// riempimento con numeri progressivi
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
tabellone[i][j]=++n;
}
}
cout<<"Visualizzazione tabellone ordinato"<<endl<<endl;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cout<<setfill('0')<<setw(2)<<tabellone[i][j]<<" "; // numero formattato con zero avanti se serve
}
cout<<endl;
}
cout<<endl<<endl;
//FUNZIONE PER ESTRARRE NUMERI CASUALI SENZA RIPETIZIONE(SBAGLIATA!)// e se li estrai tutti all'inizio?
/*for(int i=0; i<1; i++){
estrazione[i]=(rand()%90+1);
for(int j=0; j<i; j++){
if(estrazione[i]==estrazione[j]){
i--;
break;
}
}
}*/
srand((unsigned) time(NULL));
int ind=0;
estrazione[ind] = rand() % 90 + 1;
while (ind<89){ // con il while esci solo quando tutti i numeri sono estratti
//RIEMPIMENTO Vettore con 90 numeri casuali senza ripetizioni
ind++;
estrazione[ind] = rand() % 90 + 1; //(1/90)
for (int check= 0; check<ind; check++){
if (estrazione[check]==estrazione[ind]){ind--;break;}
}
}
// verifica numeri segreti già estratti.
cout<<"Visualizzazione sequenza casuale generata, deve essere segreta: "<<endl<<endl;
for(int i=0; i<90; i++){
cout<<setfill('0')<<setw(2)<<estrazione[i]<<" ";
}
//FINE FUNZIONE DI ESTRAZIONE
//PARTE IL CONFRONTO: SE IL NUMERO ESTRATTO È PRESENTE NELLA MATRICE, IL NUMERO NELLA MATRICE DIVENTA 0.
contaestratti = 0;
do{ // codice che verrà ripetuto se si vuole una nuova estrazione
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
if(tabellone[i][j]==estrazione[contaestratti]){
tabellone[i][j]=0;
break;
}
}
}
cout<<endl<<endl<<"Premi un tasto per estrarre...";
getch();
//STAMPO LA MATRICE AGGIORNATA e l'elenco degli estratti
system ("cls");
cout<<" estrazione N. "<<contaestratti+1<<endl<<" cronologia estrazioni: "<<endl<<endl;
for(int i=0; i<=contaestratti; i++){
cout<<setfill('0')<<setw(2)<<estrazione[i]<<" ";
}
cout<<endl;
int rig = 0;
int contazeriDX = 0;
int contazeriSX = 0;
for(rig=0; rig<r; rig++){
if (rig%3==0) cout<<endl<<endl; else cout<<endl; // spaziare le tessere
cout<<" ";
for(int j=0; j<c; j++){
cout<<setfill('0')<<setw(2)<<tabellone[rig][j]<<" ";
if (j==4) cout<<" "; // spaziare le tessere
if (tabellone[rig][j] == 0 && j<5) contazeriDX++; // già che ci sei conti gli zeri
if (tabellone[rig][j] == 0 && j>4) contazeriSX++; // già che ci sei conti gli zeri
}
cout<<" R."<<rig+1<<" schedaSX: "<<nomi[contazeriDX]<<" schedaDX: "<<nomi[contazeriSX];
contazeriDX = 0;
contazeriSX = 0;
}
contaestratti++;
/*
//QUI C'È IL PROBLEMA: SE CONTO I NUMERI 0 AD ESEMPIO DELLA RIGA 0 CONTA ANCHE GLI 0 DELLA RIGA SUCCESSIVA.
// non serve ripetere il ciclo, per verificare gli zeri
for(int i=0; i<c; i++){
if(tabellone[0][i]==0){
contazeririga++;
}
}
//OVVIAMENTE NON FUNZIONANDO BENE IL CONTEGGIO, MI DICE CHE AMBO ANCHE SE NELLA RIGA HO 1 SOLO 0.
cout<<endl;
if(contazeririga==2){
cout<<"ambo"<<endl;
}
cout<<endl;
cout<<"Numeri usciti: "<<contaestratti<<endl;
cout<<"zeri per riga: "<<contazeririga<<endl;
cout<<"ripetere l'estrazione?";*/
}while(contaestratti<90);
cout<<endl<<endl<<"Tabellone terminato..."<<endl<<endl;
getch();
return 0;
}