Più in generale, questo genere di esercizi è pensato come simulazione in piccolo per familiarizzare gli studenti con la legge dei grandi numeri e le distribuzioni stocastiche. Il numero di iterazioni può quindi potenzialmente essere molto elevato.
Volendo simulare il lancio di
n dadi a sei facce, con
n opportuno intero positivo, si avrà, con intuitivo significato dei simboli:
Intervallo_dei_valori = [n, 6*n]
Numero_di_valori = 6*n - n +1 = 5*n +1
Valore_per_modulo = Numero_di_valori
Offset = n
In teoria, ogni lancio di
n dadi è emulato dalla seguente singola linea di codice:
val = Offset + (rand() % Valore_per_modulo);
Si può però fare un ulteriore passo. Non avendo in genere alcuna necessità di visualizzare (né memorizzare) i singoli valori estratti, è possibile ignorare l'offset e sintetizzare il tutto in una singola assegnazione:
Freq[rand() % Numero_di_valori] += 1;
Dove Freq è ovviamente l'array delle frequenze, di dimensione pari a 5*n +1, opportunamente inizializzato con ogni locazione a zero.
Ultima nota: la variabile di induzione per il loop principale dovrebbe (sempre) essere di tipo
size_t e in ogni caso unsigned, tranne nei rarissimi casi in cui risulta esplicitamente necessario usare valori signed. Ciò, in casi come il presente, al fine di garantire il massimo range possibile in caso di numero elevato di simulazioni, ma soprattutto perché nel caso generale non ha alcun senso usare variabili di induzione (e indici) potenzialmente negative in linguaggio C.
PS: Usa i tag code per presentare il codice sorgente!