Corso di Programmazione - Prova Pratica - Terzo Appello - 21 febbraio 2001 - prova 404


L'esame di oggi ha a che fare con il front-office di un Cinema Multisala.

Un valore di tipo Prenotazione è un record di 2 campi. Il primo campo rapresenta la sala dove viene proiettato il film che si intende vedere ( A,B,C o D); il secondo campo, di tipo char* serve a contenere il codice fiscale del richiedente. In ogni sala sono disponibili solo un numero fissato di posti, determinati dall'array costante CAPIENZA, ed il numero di prenotazioni accetatte per quella sala è memorizzato nella variabile globale prenotazioni.

Un potenziale spettatore entra nella biglietteria del Cinema Multisala, e deve mettersi in fila ad uno sportello ed aspettare il suo turno. Di fronte ad ogni sportello della biglietteria, ci sarà dunque una lista di prenotazioni che aspettano di essere evase: un valore di tipo Sportello è una lista semplice di prenotazioni in attesa.



typedef enum Sala {A,B,C,D} Sala;

const int CAPIENZA[] ={50, 70, 100, 30};

int prenotazioni[]={0,0,0,0}; 

typedef struct {
	Sala sala;
	char* CF;

} Prenotazione;
 

typedef struct Sportello{
	Prenotazione prenotazione;	
	struct Sportello* next;
} Sportello;



Esercizio 1: Implementare le seguenti procedure:

void MettiInCoda(Sportello** sportello, Prenotazione prenotazione);

La procedura MettiInCoda aggiunge alla fine della fila sportello* dello sportello l'elemento prenotazione.

 

void Stampa(Sportello* sportello);

La procedura Stampa deve fornire a video una rappresentazione dello stato della lista sportello passato come parametro attuale.


Esercizio 2: Implementare la seguente funzione:

int EvadiPrenotazione(Sportello** sportello);

La funzione EvadiPrenotazione modella il fatto che la prima prenotazione nella fila sportello* venga eseguita e venga quindi tolta dalla lista. La funzione restituisce 0 se questo non risulta possibile in quanto non sono più disponibili posti per in quella sala, altrimeti restituisce 1 e aggiorna la disponibilità di posti nella sala prescelta.

Attenzione: la funzione deve liberare (mediante il comando free) la memoria relativa all'elemento di tipo Prenotazione che viene tolto dalla lista.


Esercizio 3: Implementare la seguente funzione:

void ChiudiSportello(Sportello** restaAperto, Sportello** siChiude);

La procedura ChiudiSportello modella la situazione in cui lo sportello siChiude (per un malessere improvviso dell'impiegato) viene chiuso e la fila corrispondente deve essere messa in coda allo sportello restaAperto. Alla fine dell'esecuzione di questa procedura, alla fila siChiude* dovrà essere assegnato il valore NULL.

 


IMPORTANTE:
La modalità di consegna dell'esame
è analoga a quella delle esercitazioni durante il corso: è sufficiente inviarlo come esercitazione numero 404.

Bisogna inserire esclusivamente la definizione delle funzioni richieste ed eventuali procedure o funzioni ausiliarie, per consentirne la correzione automatica.

Per superare la prova è necessario che almeno uno dei tre esercizi sia corretto (ovvero che la compilazione abbia successo e che l'esecuzione soddisfi la specifica data).