un aiuto i programmazione...
Moderatore: Staff
Regole del forum
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Rispettare le idee altrui.
2) Evitare le offese dirette.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Re: un aiuto i programmazione...
Premessa:slackvitto ha scritto:ragazzi avrei bisogno del vostro aiuto per scrivere un programmino in C++ che mi faccia questa cosa..... mi aiutereste perfavore!?
Scrivere un programma in linguaggio C++ che,
data in ingresso da tastiera una sequenza,
a priori di lunghezza indefinita di interi,
compresi tra 0 e 36,
corrispondenti alle possibili uscite del gioco della roulette,
stampi a video:
? il massimo numero di uscite consecutive di un medesimo valore ed il valore stesso;
? il numero di estrazioni per ogni dozzina,
ossia quelli appartenenti all’intervallo 1-12, 13-24, 25-36,
rispettivamente prima, seconda e terza dozzina.
? il numero di uscite per ogni colonna;
? il numero di uscite pari e quello dispari.
Es: data la sequenza 3 32 0 12 1 32 15 17 0 19 27 35 12 12 30 14 27 12 6 21 18 2 24
vengono stampati i seguenti risultati:
Il massimo numero di uscite consecutive dello stesso numero e’: 2 volte il numero 12
Uscite nella prima dozzina: 8
Uscite nella seconda dozzina: 7
Uscite nella terza dozzina: 6
Uscite nella prima colonna: 2
Uscite nella seconda colonna: 6
Uscite nella terza colonna: 13
Uscite pari: 12
Uscite dispari: 9
vi ringrazio!!
La previsione dei numeri della roulette su base statistica e' IMPOSSIBILE.
Quindi perdi il tuo tempo facendo programmi un po più intelligenti.
Se si tratta di un esercizio scolastico o vuoi imparare a programmare .....
Usa gli If per decidere che tipo di numero e' e il vector per memorizzare i dati.
Un for per scansionare il vettore ....
Metti tutti i numeri in un vettore stl
Codice: Seleziona tutto
vector<int> numeri ;
Codice: Seleziona tutto
numeri.push_back( nuovo ) ;
Codice: Seleziona tutto
for ( vector<int>::iterator itr = numeri.begin() ; itr != numeri.end() ; itr++ ) {
per esepio la prima dozzina.
if ( *itr <= 12 ) {
contatore_prima_dozz++ ;
}
seconda dozzina:
if ( *itr > 12 && *itr <= 24 ) {
contatore_seconda_dozz++ ;
}
// ecc .....
}
Ps.
ricordati di mettere in testa al tuo prog:
Codice: Seleziona tutto
#include<vector>
using namespace std ;
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
per colonna intendo:albatros ha scritto:Cioé? Che cosa intendi per colonne?il numero di uscite per ogni colonna;
Ora come ora purtroppo non ho tempo, se nessuno te lo avrà fatto prima o se non avrai risolto in altro modo, guardo di fartelo in C nel prossimo fine settimana...
Un programmino che via via che inserisci i numeri, uno alla volta, ti stampa ad ogni invio un riepilogo come quello da te richiesto ti andrebbe bene?
ad esempio la prima colonna è composta dai numeri 1 4 7 10.. di tre in tre la seconda 2 5 8 etc e la terza 3 6 9 etc
E per quanto riguarda il repilogo it's good, ma non devo usare array etc...
ti ringrazio!!
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Re: un aiuto i programmazione...
Simone_R ha scritto: Premessa:
La previsione dei numeri della roulette su base statistica e' IMPOSSIBILE.
Quindi perdi il tuo tempo facendo programmi un po più intelligenti.
ahahah,..... giuro che non ho la minima inezione di prevedere i numeri che usciranno alla roulette..... ahahahahahah!!!!
- albatros
- Iper Master

- Messaggi: 2073
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 5.4.0
- Desktop: lxde
- Distribuzione: ubuntu 20.04
- Località: Darmstadt - Germania
@slackvitto
Ciao
Ho trovato un po' di tempo stamani e forse per domani sera lo finisco.
Il programma fa quanto chiedi, a parte l'argomento della scanf non ci sono né vettori né puntatori, è pertanto un po' più lungo del "normale", è banale, ma è comunque ben commentato ...
Il programma controlla solo che i numeri siano nel range giusto, se immetti numeri con la virgola anziché interi non risponde più bene, ma immagino non sia un'applicazione "mission critical"...
Però è in C, non in C++, ti va bene uguale, vero?
Ciao
Ho trovato un po' di tempo stamani e forse per domani sera lo finisco.
Il programma fa quanto chiedi, a parte l'argomento della scanf non ci sono né vettori né puntatori, è pertanto un po' più lungo del "normale", è banale, ma è comunque ben commentato ...
Il programma controlla solo che i numeri siano nel range giusto, se immetti numeri con la virgola anziché interi non risponde più bene, ma immagino non sia un'applicazione "mission critical"...
Però è in C, non in C++, ti va bene uguale, vero?
- albatros
- Iper Master

- Messaggi: 2073
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 5.4.0
- Desktop: lxde
- Distribuzione: ubuntu 20.04
- Località: Darmstadt - Germania
Eccolo di seguito...allora aspetto il codice!!
Codice: Seleziona tutto
/* Programmino terra terra per riepilogare dei numeri usciti alla roulette*/
/* licenza: pubblico dominio - license: public domain*/
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
/* si dichiarano le variabili piu' importanti prima della main, in maniera che siano globali e si possa evitare di lavorare con i puntatori*/
int num_inserito; //variabile in cui si immagazzina il numero volta volta inserito
int num_max=0; //variabile in cui si immagazzina il massimo numero di uscite consecutive
int num_max_id; //il numero che e' uscito per piu' volte di fila
int num_max_sfida=0; //variabile dove si immagazza il numero di volte consecutive che esce lo stesso numero se è inferiore al massimo
int num_max_sfida_id; //il numero che sta uscendo per piu' volte di fila
int automatico; //variabile per impostare il riepilogo automatico ad ogni invio, 1 per si
int doz_uno=0; //numero di uscite nella prima dozzina
int doz_due=0; //numero di uscite nella seconda dozzina
int doz_tre=0; //numero di uscite nella terza dozzina
int col_uno=0; //numero di uscite nella prima colonna
int col_due=0; //num uscite colonna 2
int col_tre=0; //num uscite colonna 3
int num_pari=0; //numero uscite pari
int num_dispari=0; //numero uscite dispari
double mem_uno=0; //memoria uno per i numeri usciti
double mem_due=0; //memoria due
double mem_tre=0; //memoria tre
void piumeno(); //funzione che conta i pari e i dispari
void colonne(); //funzione che conta i membri delle colonne
void dozzine(); //funzione che conta i membri delle dozzine
void massimo(); //funzione che calcola il massimo
void riepilogo(); //funzione che stampa il riepilogoa
void inserisci_numero(); //funzione per inserire i numeri
void scrivi(int,int); //funziona che memorizza i numeri che sono usciti piu' volte consecutivamente
int leggi(int); //funzione che legge i numeri memorizzati
int main()
{
printf("Programma che crea riepiloghi di un insieme di numeri usciti alla roulette.\n\n");
/* attenzione, inserire numeri con virgola non fa piu' funzionare bene il programma*/
printf("Vuoi che ad ogni inserimento venga fatto il riepilogo o no ? ( 1 = si, altro intero = no )\n");
scanf("%d",&automatico);// per sapere se si vuole il riepilogo ad ogni ciclo
while (1) //ciclo per l'inserimento dati
{
inserisci_numero();
if (num_inserito==37)//se il numero inserito e' 37 fa il riepilogo e esce
{
riepilogo();
return 0;
}
if (num_inserito<37)//se il numero e' fra 0 e 36 aumenta i contatori
{
piumeno(num_inserito);
colonne(num_inserito);
dozzine(num_inserito);
massimo(num_inserito);
}
if (num_inserito==39) automatico=1;//se il numero inserito e' 39 abilita il riepilogo automatico
if (num_inserito==38) riepilogo();//se il numero inserito e' 38 fra il riepilogo
if ((automatico==1)&&(num_inserito!=38)) riepilogo();//fa il riepilogo automatico a meno che non sia stato gia' fatto avendo inserito 38
}//fine ciclo while
}//fine main
void inserisci_numero()
/* si inseriscono i numeri: con 37 si esce dal programma, con 38 si fa un riepilogo una tantum, con 39 si imposta il riepilogo automatico*/
{
do
{
printf("\nInserisci un numero:\n37 per uscire dal programma\n38 per avere un riepilogo una tantum\n39 per impostare il riepilogo automatico\n\n");
scanf("%d", &num_inserito);
}
while (num_inserito<0 || num_inserito>39);
}
void riepilogo()
/* si fa il riepilogo dei dati stampando le relative variabili*/
{
int i;//variabile contatore di servizio
printf("\nRIEPILOGO:\n");
printf("Uscite nella prima dozzina: %d\n", doz_uno);
printf("Uscite nella seconda dozzina: %d\n", doz_due);
printf("Uscite nella terza dozzina: %d\n", doz_tre);
printf("Uscite nella prima colonna: %d\n", col_uno);
printf("Uscite nella seconda colonna: %d\n", col_due);
printf("Uscite nella terza colonna: %d\n", col_tre);
printf("Uscite pari: %d\n", num_pari);
printf("Uscite dispari: %d\n", num_dispari);
printf("Il massimo numero di uscite consecutive dello stesso numero e' %d volte i numeri:\n", num_max);
for (i=0;i<37;i++)
{
if (leggi(i)==1) printf("%d ",i); //se nella variabile di memorizzazione c'e' un 1 corrispondente stampa il numero
}
printf("\n");
}
void piumeno()
{
if (num_inserito==0) return;//si esclude lo 0
double dividendo; //dichiara un double per la funzione floor successiva
dividendo=num_inserito;
double quoziente=(dividendo/2); //variabile quoziente pari alla meta' del numero inserito
if (quoziente==floor(quoziente)) num_pari+=1; /*se quoziente e' uguale al primo intero minore di esso vuol dire che e' intero e quindi il numero inserito, di cui e' la meta', e' pari, per cui si incrementa di uno il contatore dei pari, se non lo e' alla riga dopo si incrementa di uno il contatore dei dispari*/
else num_dispari+=1;
}
void dozzine()
{
if (num_inserito==0) return;//si esclude lo 0
if (num_inserito>24)
{
doz_tre+=1;//aumenta il contatore della dozzina 3
return;
}
if (num_inserito>12)
{
doz_due+=1;//aumenta il contatore della dozzina 2
return;
}
if (num_inserito>1)
{
doz_uno+=1;//aumenta il contatore della dozzina 1
return;
}
}
void colonne()
{
if (num_inserito==0) return; //si esclude lo 0
int rimanenza;//variabile intera per uno switch
double diviso=floor((num_inserito+3)/3);//il +3 e' per trattare i casi uno e due come gli altri
double resto=(num_inserito+3)-diviso*3;
/*la colonna tre sono multipli di 3, la colonna due sono multipli di 3 meno uno, la colonna uno multipli di 3 meno 2: se resto e' 0 sono allora sono nella colonna 3, se uno nella uno, se due nella due*/
rimanenza=resto;//si assegna ad un intero il valore di resto, double
switch (rimanenza)
{
case 0: col_tre+=1;
break;
case 1: col_uno+=1;
break;
default: col_due+=1;
}
}
void massimo()
{
/* si controlla che sia il primo numero inserito vedendo qual e' il massimo di numeri consecutivi, che all'inizio sara' 0*/
if (num_max==0)
{
num_max_sfida_id=num_inserito;
num_max=1;
num_max_id=num_max_sfida_id;
num_max_sfida=1;
scrivi(num_inserito,0);
return;
}
/* caso in cui il numero immesso ora e' uguale al numero che aspira ad essere quello che e' uscito consecutivamente piu' volte */
if (num_inserito==num_max_sfida_id) num_max_sfida+=1; //aumenta il contatore di sfida di uno
else
{
/*l'ultimo numero inserito e' diverso*/
num_max_sfida=1;//si riparte da capo
num_max_sfida_id=num_inserito;
}
/* caso in cui e' stato eguagliato il record di un altro numero*/
if (num_max_sfida==num_max)
{
num_max_id=num_inserito;//il record viene assegnato al numero attuale
scrivi(num_inserito,1);// registra il numero inserito ora
}
/* caso in cui è stato superato il record */
if (num_max_sfida>num_max)
{
num_max=num_max_sfida;//abbiamo un nuovo record
/* num_max_id e' gia' uguale a num_inserito da quanto num_max_sfida==num_max*/
num_max_id=num_inserito;
num_max_sfida_id=num_inserito;
scrivi(num_inserito,0);//registra il record solitario
}
}
void scrivi(int numero, int flag)/*se il flag e' 0 registra solo il nuovo numero, altrimenti lo aggiunge agli altri*/
{
double indicatore; //potenza di 10 identificatrice dei numeri, usata nelle variabili di memorizzazione
mem_uno*=flag; /*moltiplica le variabili di memorizzazione per flag, azzerandole se flag e' 0*/
mem_due*=flag;
mem_tre*=flag;
/*i numeri si registrano associando un numero alla potenza di dieci di quel numero, gli operatori bitwise sarebbero stati, utilizzando una tecnica simile, una soluzione certamente migliore*/
//registra i valori da 0 a 15 nella variabile mem_uno
if ((numero>-1 && numero<16))
{
indicatore=pow(10,numero);
if (leggi(numero)==0) mem_uno=mem_uno+indicatore;
}
//registra i valori da 16 a 30 nella variabile mem_due
if ((numero>15 && numero<31))
{
indicatore=pow(10,numero-16);
if (leggi(numero)==0) mem_due=mem_due+indicatore;
}
//registra i valori da 31 a 36 nella variabile mem_tre
if ((numero>30) && (leggi(numero)==0))
{
indicatore=pow(10,numero-31);
mem_tre=mem_tre+indicatore;
}
}
int leggi(int numero)
{
/*con tre cicli for si estraggono dalle variabili di memorizzazione i numeri che sono usciti per più volte consecutivamente*/
int i;//variabile di conteggio
double num1=mem_uno; //variabili copia di mem_uno, mem_due e mem_tre
double num2=mem_due;
double num3=mem_tre;
/*per estrarre i numeri si guarda se la variabile di memorizzazione divisa per due è uguale alla parte intera di tale divisione, se NON lo e' allora l'ultima cifra era un 1 e si scrive la relativa cifra, se no si divide per 10 e si ripete la procedura*/
if (numero<16)
{
i=0;
while (i<numero)
{
num1=floor(num1/10);
i++;
}
if((floor(num1/2)!=(num1/2))) return 1; else return 0;
}
if (numero<31)
{
i=16;
while (i<numero)
{
num2=floor(num2/10);
i++;
}
if((floor(num2/2)!=(num2/2))) return 1; else return 0;
}
if (numero<37)
{
i=31;
while (i<numero)
{
num3=floor(num3/10);
i++;
}
if((floor(num3/2)!=(num3/2))) return 1; else return 0;
}
return 0;
}
Naturalmente non mi assumo nessuna responsabilità di nessun tipo...
Per compilarlo usa gcc -o <come-vuoi-chiamare-l'eseguibile> <come-hai-chiamato-il-sorgente> -lm (per la libreria matematica standard).
Es. io ho usato gcc -o try roulette.c -lm
Il codice è un po' lunghino, la cosa un po' più noiosa è stato l'immagazzinamento dei numeri usciti più volte di seguito, senza vettori o puntatori si fa maluccio...
Avrei potuto usare un file di testo temporaneo in appoggio, ma non sapevo se ti sarebbe andato bene...
Pur usando la stessa tecnica di immagazzinamento dati, aver usato operatori bitwise con numeri binari sarebbe stato più veloce e lineare...
Avrei potuto anche usare 37 variabili intere per i numeri, ma mi pareva troppo goffo...
I commenti ci sono, ma non so fino a che punto siano chiari, scusa se in alcuni casi ho usato lettere accentate e in altri gli apostrofi...
Provalo un po', se ci sono problemi, fammi sapere...
In ogni caso, qui sul forum c'è di sicuro chi ti proporrà soluzioni migliori...
- Absolut
- Linux 4.x

- Messaggi: 1465
- Iscritto il: gio 10 feb 2005, 0:00
- Slackware: current
- Località: Roma
Beh in ogni caso, sia che vada bene sia che non, i miei ringraziamenti te li meriti tutti... gli do un occhiata a provo!!
Intanto avevo buttato giù un po' di codice e sembra funzioni bene. te lo allego così mi dici se puo andare o meno... Tieni presente che io non programmo in c++ e che mi sono basato solo sulla conoschenza di java e ho cercato la sintassi di C.
GRazie infinitamente!
#include <iostream.h>
int main()
{
int num;
int pari;
int dispari;
int dozz1;
int dozz2;
int dozz3;
int col1;
int col2;
int col3;
int x;
int y;
int z;
int rip;
int numprec;
int ripmax;
int max;
pari=0;
dispari=0;
dozz1=0;
dozz2=0;
dozz3=0;
col1=0;
col2=0;
col3=0;
x=1;
y=2;
z=3;
rip=1;
ripmax=0;
max=0;
numprec=0;
while(1) {
cout << "roulette";
cout << endl;
cout << "inserisci numeri interi compresi tra 0 e 36, termina con ctrl-Z ";
cin >> num;
if (cin.eof())
break;
//pari e dispari
// se il numero non è zero
if(num!=0) {
if (num%2!=0) //se il resto è uguale a zero
dispari++;
else {
pari++;
}
}
//dozzine
if (num<13 && num>0)
dozz1++;
if (num>12 && num<25)
dozz2++;
if (num>24 && num<37)
dozz3++;
//colonne
for(int i=1; i<37; i=i+3)
// while (x<37)
{
if (num==i )
{col1++;}
}
//while (y<37)
for(int j=2; j<37; j=j+3) {
if (num==j)
{col2++;}
}
for(int k=3; k<37; k=k+3)
{
if (num==k)
{col3++;}
}
//ripetizioni massime
if (numprec==num)
{rip++;
max=num;
}
numprec=num;
if (rip>ripmax)
{ripmax=rip;
}
}
cout << "i numeri pari della sequenza sono ";
cout << pari;
cout << endl;
cout << "i numeri dispari della sequenza sono ";
cout << dispari;
cout << endl;
cout << "i numeri appartenenti alla prima dozzina sono ";
cout << dozz1;
cout << endl;
cout << "i numeri appartenenti alla seconda dozzina sono ";
cout << dozz2;
cout << endl;
cout << "i numeri appartenenti alla terza dozzina sono ";
cout << dozz3;
cout << endl;
cout << "i numeri appartenenti alla prima colonna sono ";
cout << col1;
cout << endl;
cout << "i numeri appartenenti alla seconda colonna sono ";
cout << col2;
cout << endl;
cout << "i numeri appartenenti alla terza colonna sono ";
cout << col3;
cout << endl;
cout << "il massimo numero di uscite consecutive è ";
cout << ripmax;
cout << endl;
cout << "per il numero ";
cout << max;
cout << endl;
Intanto avevo buttato giù un po' di codice e sembra funzioni bene. te lo allego così mi dici se puo andare o meno... Tieni presente che io non programmo in c++ e che mi sono basato solo sulla conoschenza di java e ho cercato la sintassi di C.
GRazie infinitamente!
#include <iostream.h>
int main()
{
int num;
int pari;
int dispari;
int dozz1;
int dozz2;
int dozz3;
int col1;
int col2;
int col3;
int x;
int y;
int z;
int rip;
int numprec;
int ripmax;
int max;
pari=0;
dispari=0;
dozz1=0;
dozz2=0;
dozz3=0;
col1=0;
col2=0;
col3=0;
x=1;
y=2;
z=3;
rip=1;
ripmax=0;
max=0;
numprec=0;
while(1) {
cout << "roulette";
cout << endl;
cout << "inserisci numeri interi compresi tra 0 e 36, termina con ctrl-Z ";
cin >> num;
if (cin.eof())
break;
//pari e dispari
// se il numero non è zero
if(num!=0) {
if (num%2!=0) //se il resto è uguale a zero
dispari++;
else {
pari++;
}
}
//dozzine
if (num<13 && num>0)
dozz1++;
if (num>12 && num<25)
dozz2++;
if (num>24 && num<37)
dozz3++;
//colonne
for(int i=1; i<37; i=i+3)
// while (x<37)
{
if (num==i )
{col1++;}
}
//while (y<37)
for(int j=2; j<37; j=j+3) {
if (num==j)
{col2++;}
}
for(int k=3; k<37; k=k+3)
{
if (num==k)
{col3++;}
}
//ripetizioni massime
if (numprec==num)
{rip++;
max=num;
}
numprec=num;
if (rip>ripmax)
{ripmax=rip;
}
}
cout << "i numeri pari della sequenza sono ";
cout << pari;
cout << endl;
cout << "i numeri dispari della sequenza sono ";
cout << dispari;
cout << endl;
cout << "i numeri appartenenti alla prima dozzina sono ";
cout << dozz1;
cout << endl;
cout << "i numeri appartenenti alla seconda dozzina sono ";
cout << dozz2;
cout << endl;
cout << "i numeri appartenenti alla terza dozzina sono ";
cout << dozz3;
cout << endl;
cout << "i numeri appartenenti alla prima colonna sono ";
cout << col1;
cout << endl;
cout << "i numeri appartenenti alla seconda colonna sono ";
cout << col2;
cout << endl;
cout << "i numeri appartenenti alla terza colonna sono ";
cout << col3;
cout << endl;
cout << "il massimo numero di uscite consecutive è ";
cout << ripmax;
cout << endl;
cout << "per il numero ";
cout << max;
cout << endl;
- albatros
- Iper Master

- Messaggi: 2073
- Iscritto il: sab 4 feb 2006, 13:59
- Kernel: 5.4.0
- Desktop: lxde
- Distribuzione: ubuntu 20.04
- Località: Darmstadt - Germania
Premetto che ho scritto poco in C++ e che non padroneggio il linguaggio, ne conosco poco più che la sintassi e ancora non mi trovo a mio agio con i templates, ho iniziato giusto pochi giorni fa la lettura di Thinking C++ con l'idea di approfondirne la conoscenza e di scrivere qualcosina per poi iniziare uno studio delle qt.
Era anche da diverso tempo che non scrivevo nulla in C, per cui ho colto l'occasione per riprenderci un po' la mano, anche se con funzioni e tecniche elementari.
Ad una prima occhiata il tuo codice mi pare lineare e corretto, logici e funzionanti i 3 cicli per le colonne e ragionevolissimi gli algoritmi per dozzine e per i pari/dispari.
Piccola nota: usare gli header classici .h con il c++ è ora sconsigliato, a me g++ da un warning se lo faccio a meno di non usare -Wno-deprecated.
Nel mio codice, al posto del resto, ho usato floor, ben più macchinoso, ma ad un certo punto ho preferito usare dei double per immagazzinare i dati e % vuole interi...
Ok, avrei comunque potuto usare % nella funzione che ho chiamato piumeno, ma non mi ci ho più pensato...
Riguardo al programma, come ti dicevo la parte più complicata è quella che ti dice qual è il numero massimo di uscite consecutive...
Il tuo programma è, a parte i costrutti diversi fra C e C++ tipo il cout, concettualmente uguale alla prima versione che avevo fatto io, solo che l'ho poi modificato per il problema dei consecutivi.
Ovvero: se ti interessa sapere solo il massimo numero di uscite consecutive ignorando poi i numeri che successivamente dovessero raggiungere tale massimo, bene, altrimenti, se vuoi tenere conto della possibilità che ci siano più numeri che raggiungano il massimo, devi in qualche modo memorizzare i risultati.
Ad esempio, nel tuo programma la serie 1 15 15 15 2 3 7 7 7 0 2 2 34 29 29 29 12
darebbe solo 3 volte 15, mentre abbiamo ben 3 numeri, 15, 7 e 29 che sono usciti per 3 volte consecutivamente...
Potrebbe, per quanto improbabile, anche succedere che escano due volte di fila tutti i 37 numeri della roulette, esempio 2 2 5 5 1 4 4 1 1 6 8 9 9 6 6 8 8 eccetera.
Non sapendo se era consentito memorizzare i dati su file, non potendo usare vettori (soluzione di gran lunga la migliore) o strutture, la soluzione poteva essere usare una variabile per ciascun numero, ma mi pareva una soluzione grossolana, per quanto sicura e meno soggetta ad errori.
Ho pensato allora ad usare una variabile dove la posizione di un uno significasse l'uscita di un certo numero... Usare i binari con gli operatori bitwise sarebbe stata in questo caso la tecnica migliore, ma non sapevo se era consentito... Ho allora usato le potenze del 10 sfruttando alcune semplici funzioni della libreria matematica standard per codificare i numeri e i double per la loro maggiore capienza...
Non so se ho pensato agli algoritmi migliori, ma è stato comunque un esercizio per me utile e divertente (a parte il quarto d'ora perso dietro un == che doveva essere un =).

Era anche da diverso tempo che non scrivevo nulla in C, per cui ho colto l'occasione per riprenderci un po' la mano, anche se con funzioni e tecniche elementari.
Ad una prima occhiata il tuo codice mi pare lineare e corretto, logici e funzionanti i 3 cicli per le colonne e ragionevolissimi gli algoritmi per dozzine e per i pari/dispari.
Piccola nota: usare gli header classici .h con il c++ è ora sconsigliato, a me g++ da un warning se lo faccio a meno di non usare -Wno-deprecated.
Nel mio codice, al posto del resto, ho usato floor, ben più macchinoso, ma ad un certo punto ho preferito usare dei double per immagazzinare i dati e % vuole interi...
Ok, avrei comunque potuto usare % nella funzione che ho chiamato piumeno, ma non mi ci ho più pensato...
Riguardo al programma, come ti dicevo la parte più complicata è quella che ti dice qual è il numero massimo di uscite consecutive...
Il tuo programma è, a parte i costrutti diversi fra C e C++ tipo il cout, concettualmente uguale alla prima versione che avevo fatto io, solo che l'ho poi modificato per il problema dei consecutivi.
Ovvero: se ti interessa sapere solo il massimo numero di uscite consecutive ignorando poi i numeri che successivamente dovessero raggiungere tale massimo, bene, altrimenti, se vuoi tenere conto della possibilità che ci siano più numeri che raggiungano il massimo, devi in qualche modo memorizzare i risultati.
Ad esempio, nel tuo programma la serie 1 15 15 15 2 3 7 7 7 0 2 2 34 29 29 29 12
darebbe solo 3 volte 15, mentre abbiamo ben 3 numeri, 15, 7 e 29 che sono usciti per 3 volte consecutivamente...
Potrebbe, per quanto improbabile, anche succedere che escano due volte di fila tutti i 37 numeri della roulette, esempio 2 2 5 5 1 4 4 1 1 6 8 9 9 6 6 8 8 eccetera.
Non sapendo se era consentito memorizzare i dati su file, non potendo usare vettori (soluzione di gran lunga la migliore) o strutture, la soluzione poteva essere usare una variabile per ciascun numero, ma mi pareva una soluzione grossolana, per quanto sicura e meno soggetta ad errori.
Ho pensato allora ad usare una variabile dove la posizione di un uno significasse l'uscita di un certo numero... Usare i binari con gli operatori bitwise sarebbe stata in questo caso la tecnica migliore, ma non sapevo se era consentito... Ho allora usato le potenze del 10 sfruttando alcune semplici funzioni della libreria matematica standard per codificare i numeri e i double per la loro maggiore capienza...
Non so se ho pensato agli algoritmi migliori, ma è stato comunque un esercizio per me utile e divertente (a parte il quarto d'ora perso dietro un == che doveva essere un =).

