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:

Festival *iscrizioni(int n_iscritti);

La procedura iscrizioni gestisce le iscrizioni ad un festival musicale. La procedura deve creare dinamicamente un valore di tipo Festival che deve essere inizializzato con dei valori inseriti dall'utente (i voti iniziali assegnati alle canzoni devono essere 0). In particolare, l'utente deve inserire un numero di cantanti pari a n_iscritti e per ognuno di loro deve specificare il nome, la categoria e il titolo della sua canzone.
La procedura deve restituire il puntatore all'array creato.


Esercizio 2: Implementare la seguente funzione:

Cantante vincitore(Festival f, int n_iscritti);

La funzione vincitore restituisce un valore di tipo Cantante corrispondente al cantante di categoria big o giovani (non ospiti) la cui canzone ha ottenuto il voto finale maggiore tra quelle iscritte al festival f  di dimensione n_iscritti.


Esercizio 3: Implementare la seguente procedura:

void stampa_ospiti(Festival f, int n_iscritti);

La procedura stampa_ospiti deve stampare a video le informazioni riguardanti i cantanti iscritti al festival f come ospiti. Per ognuno di questi cantanti deve essere visualizzato il nome, il titolo della sua canzone, e il voto assegnato dal pubblico alla sua canzone.


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