2023_valutata_1.c (download)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define PMIN 1
#define PMAX 10000
void inserimento(int *Np);
int gioca(int *passi, int N);
void salva_freq(int *passi, int Np, int passi_max);
int main() {
    int Np, i;
    int passi[100] = {0};
    int N_mario = 0;
    
    srand48(time(NULL));
    
    inserimento(&Np);
    
    for(i = 0; i < Np; i++) {
        int N = drand48() * 11 + 10;
        int risultato = gioca(passi, N);
        N_mario += risultato;
    }
    
    salva_freq(passi, Np, 100);
    
    printf("Resoconto:\n----------\n");
    printf("N partite: %d\nN vittorie di Gino: %d\nN vittorie di Mario: %d\n", Np, Np - N_mario, N_mario);
    
    return 0;
}
void inserimento(int *Np) {
    *Np = 0;
    do {
        printf("Inserire il numero di partite da giocare, compreso tra %d e %d: \n", PMIN, PMAX);
        scanf("%d", Np);
    } while(*Np < PMIN || *Np > PMAX);
}
int gioca(int *passi, int N) {
    int N_passi = 0;
    int estratti[21] = {0};
    int P = N;
    while(P > 0 && P < 4 * N) {
        int k = drand48() * N + 1;
        if(estratti[k]) {
            P -= k;
        }
        else {
            P += k;
        }
        estratti[k] = 1;
        N_passi++;
    }
    
    passi[N_passi]++;
    
    return (P <= 0);
}
void salva_freq(int *passi, int Np, int passi_max) {
    int i;
    FILE *output = fopen("passi.dat", "w");
    if(output == NULL) {
      printf("Impossibile aprire il file\n");
      exit(1);
    }
    for(i = 0; i < passi_max; i++) {
        fprintf(output, "%d %.4lf\n", i, passi[i] / (double) Np);
    }
    fclose(output);
}