Corso di Programmazione - Prova Pratica - 19 febbraio 2004


L'esame di oggi vi chiede di gestire un festival di musica leggera.

I partecipanti ad un festival sono divisi  in  tre categorie: i big, i giovani, e gli ospiti non in gara, rappresentati dai valori del tipo enumerazione Categoria.
Ad ogni cantante e' associata una canzone, rappresentata dalla struttura Canzone che contiene tre campi: uno per il tiotolo, e due campi di tipo intero che raccolgono il voto espresso dalla giuria tecnica e dal pubblico.
Una gara canora e' quindi rappresentata da un valore di tipo Festival, cioe' un array i cui elementi sono strutture di tipo Cantante.

Le regole del festival canoro prevedono che il voto finale di ogni canzone debba essere calcolato facendo la media tra il voto espresso dal pubblico e  quello espresso dalla giuria.

#define MAX_ISCRITTI 30

typedef enum {big,giovani,ospiti} Categoria;


typedef struct {
char titolo[35];
int voto_giuria;
int voto_pubblico;
} Canzone;


typedef struct {
char nome[20];
Canzone canzone;
Categoria categoria;
} Cantante;


typedef Cantante Festival[MAX_ISCRITTI];


Esercizio 1: Implementare la seguente procedura:

void elenco_ospiti(Festival f, int n_iscritti, Festival *solo_ospiti, int *n_ospiti);

La procedura elenco_ospiti crea dinamicamente un valore di tipo Festival i cui elementi sono i cantanti iscritti come ospiti al festival f (di dimensione n_iscritti) passato come primo parametro. La procedura deve assegnare l'indirizzo del nuovo array al parametro solo_ospiti e la sua dimensione effettiva al parametro n_ospiti.


Esercizio 2: Implementare la seguente procedura:

void votazioni(Festival f, int giuria[], int pubblico[], int n_iscritti);

La procedura votazioni aggiorna lo stato del festival f inserendo i voti delle canzoni assegnati dalla giuria e dal pubblico. Il parametro n_iscritti indica sia il numero di iscritti al festival che la dimensione degli array giuria e pubblico che contengono i voti espressi dai giurati e dal pubblico su ognuno dei cantanti isctitti (big, giovani e ospiti).


Esercizio 3: Implementare la seguente procedura:

void vincitore_big(Festival f, int n_iscritti);

La procedura vincitore_big deve calcolare la canzone vincitrice del festival f nella categoria big. Una volta identificata tale canzone, la procedura deve stamparne a video il  titolo, il nome del cantante e il voto finale ottenuto.


La modalità di consegna dell'esame è analoga a quella delle esercitazioni durante il corso: è sufficiente inviarlo come esercitazione numero 731. Bisogna inserire esclusivamente la definizione delle procedure, per consentirne la correzione automatica.