#include #include #include #define NMIN 1000 #define NMAX 10000000 void inserimento(int *Np); int genera_numero(); void salva_histo(int *histo, int Np); int main() { int Np, i; int N_gino = 0; int min_colpi = 50; int max_colpi = 0; int histo[50] = {0}; inserimento(&Np); srand48(time(NULL)); for(i = 0; i < Np; i++) { int num = genera_numero(31000, 32000); int N_colpi = 1; while(num > 1) { if(num % 2 == 0) { num /= 2; } else { num--; } N_colpi++; } if(N_colpi % 2) { N_gino++; if(N_colpi > max_colpi) { max_colpi = N_colpi; } if(N_colpi < min_colpi) { min_colpi = N_colpi; } } histo[N_colpi - 1]++; } salva_histo(histo, Np); printf("Giocate %d partite\n", Np); printf("Gino ha vinto %d partite, Mario %d\n", N_gino, Np - N_gino); printf("Minimo di colpi: %d, massimo di colpi: %d\n", min_colpi, max_colpi); return 0; } void inserimento(int *Np) { int res; *Np = 0; do { printf("Inserire il numero di partite da giocare, compreso tra %d e %d: \n", NMIN, NMAX); res = scanf("%d", Np); } while(*Np < NMIN || *Np > NMAX || res != 1); } int genera_numero(int N1, int N2) { return drand48() * (N2 - N1 + 1) + N1; } void salva_histo(int *passi, int Np) { int i; FILE *output = fopen("freq.dat", "w"); if(output == NULL) { printf("Impossibile aprire il file\n"); exit(1); } for(i = 0; i < 50; i++) { if(passi[i] > 0) { fprintf(output, "%d %.10lf\n", i + 1, passi[i] / (double) Np); } } fclose(output); }