2023_valutata_3.c (download)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NLANCI 6
#define GMIN 1
#define GMAX 100000
void lanciaDadi(int dadi[NLANCI]);
void ordinaDadi(int dadi[NLANCI]);
void salvaFrequenze(int freq[NLANCI + 1], int Ng);
int main() {
    int Ng = 0, i, j;
    int freq[NLANCI + 1] = {0};
    int p1[NLANCI], p2[NLANCI];
    int N_gino = 0, N_pareggi = 0;
    srand48(time(NULL));
    do {
        printf("Inserire il numero di giocate, compreso tra %d e %d: \n", GMIN, GMAX);
        scanf("%d", &Ng);
    } while(Ng < GMIN || Ng > GMAX);
    for(i = 0; i < Ng; i++) {
        lanciaDadi(p1);
        lanciaDadi(p2);
        ordinaDadi(p1);
        ordinaDadi(p2);
        int P_gino = 0, P_mario = 0;
        for(j = 0; j < NLANCI; j++) {
            if(p1[j] > p2[j]) {
                P_gino++;
            }
            if(p2[j] > p1[j]) {
                P_mario++;
            }
        }
        freq[P_gino]++;
        if(P_gino > P_mario) {
            N_gino++;
        }
        else if(P_gino == P_mario) {
            N_pareggi++;
        }
    }
    salvaFrequenze(freq, Ng);
    printf("Numero giocate: %d\n", Ng);
    printf("Gino ha vinto %d volte, Mario ha vinto %d volte\n", N_gino, Ng - N_gino - N_pareggi);
    printf("Numero di pareggi: %d\n", N_pareggi);
    return 0;
}
void lanciaDadi(int dadi[NLANCI]) {
    int i;
    for(i = 0; i < NLANCI; i++) {
        dadi[i] = drand48() * 6 + 1;
    }
}
void ordinaDadi(int dadi[NLANCI]) {
    int i, j, tmp;
    for(i = 0; i < NLANCI - 1; i++) {
        for(j = 0; j < NLANCI - 1 - i; j++) {
            if(dadi[j] < dadi[j + 1]) {
                tmp = dadi[j];
                dadi[j] = dadi[j + 1];
                dadi[j + 1] = tmp;
            }
        }
    }
}
void salvaFrequenze(int freq[NLANCI + 1], int Ng) {
    int i;
    FILE *output = fopen("freq.dat", "w");
    if(output == NULL) {
      printf("Impossibile aprire il file\n");
      exit(1);
    }
    for(i = 0; i < NLANCI + 1; i++) {
        fprintf(output, "%d %.4lf\n", i, freq[i] / (double) Ng);
    }
    fclose(output);
}