Una società di telefonia cellulare gestisce un programma di premiazione per “utenti fedeli”. In particolare, per ogni cliente viene salvato su un file binario “punti.dat” il nome del cliente (al massimo 31 caratteri) e un numero intero che rappresenta i punti accumulati. Tali informazioni sono organizzate come una struttura user, opportunamente definita dal candidato:

#define DIM 32
typedef struct {
char name[DIM];
int points;
} user;


1) Si scriva una funzione:
int readPoints (char usersFile[], user results[], int maxDim, int minPoints)
che, ricevuto in ingresso il nome di un file usersFile, un array results di strutture user, la dimensione massima dell’array maxDim, e un limite inferiore di punti minPoints, copi nell’array results i dati dei clienti che hanno almeno i punti specificati da minPoints
La funzione deve restituire come risultato il numero di utenti con almeno minPoints; si noti che tale risultato rappresenta anche la dimensione logica dell’array results. Qualora il file non sia accessibile, la funzione deve restituire il valore -1;

2) Si scriva poi un programma main() che chieda all’utente il numero di clienti salvati sul file (tale numero sarà noto solo a tempo di esecuzione), e allochi dinamicamente un vettore V di user sufficientemente grande per poter contenere, nel caso peggiore, i dati di tutti gli utenti salvati in usersFile. Il programma dovrà poi chiedere all’utente il minimo punteggio e, utilizzando la funzione readPoints(), leggere da file e memorizzare in V i dati degli utenti che hanno almeno il punteggio minimo specificato. Il programma infine deve stampare a video il nome ed il punteggio degli utenti contenuti in V se e solo se il nome comincia per “Me”