Certo, devi solo rivedere la logica del tuo programma.
Se sai usare le struct, puoi creare una struct Num così:
Codice PHP:
struct Num
{
int n;
bool flag;
};
Il flag indica se un numero è stato estratto o meno.
Al posto di
avrai
Quando carichi il tabellone farai:
codice:
int counter = 1;
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
table[i][j].n = counter++;
table[j].flag = false;
}
}
settando i numeri e dicendo che ancora non sono estratti (ovvio, lo stati caricando).
Poi farai un ciclo per estrarre i 90 numeri dal vettore numbers (quello mischiato casualmente).
Codice PHP:
counter = 0;
do {
system("cls");
int number = numbers[counter++];
cout << "Estraggo il numero... " << number << endl << endl;
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
if(table[i][j].n == number)
{
table[i][j].flag = true;
break;
}
}
}
printTable(table, hConsole);
cin.get();
} while(counter < 90);
Settando il flag a true, indicherai che il numero è stato estratto.
La funzione printTable ha la seguente forma:
Codice PHP:
void printTable(Num table[9][10], HANDLE& hConsole)
{
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
if(table[i][j].n < 10)
cout << " ";
if(table[i][j].flag)
SetConsoleTextAttribute(hConsole, 2);
cout << table[i][j].n << " ";
SetConsoleTextAttribute(hConsole, 15);
if( (table[i][j].n % 5 == 0) && (table[i][j].n % 10 != 0) )
cout << " | ";
else if(table[i][j].n % 10 == 0)
cout << endl;
if(table[i][j].n % 30 == 0)
{
cout << endl;
for(int k = 0; k < 45; k++, cout << "-");
cout << endl;
}
}
}
}
SetConsoleTextAttribute(hConsole, 2); vuol dire colorare di verde,
SetConsoleTextAttribute(hConsole, 15); vuol dire colorare di bianco.
Nota che colori di verde solo se il flag è settato a true.
Mi sono permesso di modificare la stampa della tabella. Infatti non hai bisogno di variabili ausiliarie (le tue aux).
Se il numero è divisibile per 30 (30, 60, 90) stampi la linea di trattini.
Se il numero è divisibile per 5 ma non per 10 (5, 15....) stampi gli spazi, la barra e altri spazi.
Se il numero è divisibile per 10, stampi la newline.
Tutto assieme:
Codice PHP:
#include <iostream>
#include <windows.h>
using namespace std;
struct Num
{
int n;
bool flag;
};
void printTable(Num table[9][10], HANDLE& hConsole)
{
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
if(table[i][j].n < 10)
cout << " ";
if(table[i][j].flag)
SetConsoleTextAttribute(hConsole, 2);
cout << table[i][j].n << " ";
SetConsoleTextAttribute(hConsole, 15);
if( (table[i][j].n % 5 == 0) && (table[i][j].n % 10 != 0) )
cout << " | ";
else if(table[i][j].n % 10 == 0)
cout << endl;
if(table[i][j].n % 30 == 0)
{
cout << endl;
for(int k = 0; k < 45; k++, cout << "-");
cout << endl;
}
}
}
}
int main()
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
Num table[9][10];
int numbers[90];
const int swaps = 200;
int counter;
// CARICO
for(int i = 1; i <= 90; i++)
numbers[i-1] = i;
// MISCHIO
srand((unsigned int)time(NULL));
for(int i = 0; i < swaps; i++)
{
int i = (rand() % 90);
int j = (rand() % 90);
swap(numbers[i], numbers[j]);
}
// CREO IL TABELLONE
counter = 1;
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
table[i][j].n = counter++;
table[i][j].flag = false;
}
}
system("cls");
printTable(table, hConsole);
counter = 0;
do {
system("cls");
int number = numbers[counter++];
cout << "Estraggo il numero... " << number << endl << endl;
for(int i = 0; i < 9; i++)
{
for(int j = 0; j < 10; j++)
{
if(table[i][j].n == number)
{
table[i][j].flag = true;
break;
}
}
}
printTable(table, hConsole);
cin.get();
} while(counter < 90);
}