Un Cinema Multisala
Transcript
Un Cinema Multisala
Un Cinema Multisala Un valore di tipo Prenotazione è un record di due campi. Il primo campo rappresenta la sala in cui viene proiettato il film che si intende vedere (A, B, C o D); il secondo campo CF, di tipo char *, serve a contenere il codice fiscale del richiedente. In ogni sala sono disponibili solo un numero fissato di posti, determinato dall’array costante CAPIENZA, ed il numero di prenotazioni accettate per quella sala è memorizzato nella variabile globale prenotazioni. Un potenziale spettatore entra nella biglietteria del Cinema Multisala, compila la sua prenotazione e si mette in fila ad uno sportello ad 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 Elem_Sportello { Prenotazione prenotazione; struct Elem_Sportello * next; } Elem_Sportello; typedef Elem_Sportello * Sportello; Esercitazione 10 ESERCIZIO 1 Implementare le seguenti procedure: void MettiInCoda (Sportello s, Prenotazione p); che aggiunge alla fine della fila s l’elemento p; void Stampa (Sportello s ); che fornisce a video una rappresentazione dello stato della lista s passato come parametro attuale. Esercitazione 10 ESERCIZIO 2 Implementare la seguente funzione: int EvadiPrenotazione (Sportello *ptr_s ); che accetta la prima prenotazione contenuta nella lista puntata da ptr_s e la toglie quindi dalla lista. La funzione restituisce 0 se questo non risulta possibile in quanto non sono più disponibili posti in quella sala, altrimenti restituisce 1 e aggiorna la disponibilità dei posti nella sala prescelta. La funzione deve liberare (mediante il comando free) la memoria relativa all’elemento di tipo Prenotazione che viene tolto dalla lista. Esercitazione 10 ESERCIZIO 3 Implementare la seguente procedura: void ChiudiSportello (Sportello *resta_aperto, Sportello *si_chiude); che chiude lo sportello si_chiude mettendo la fila corrispondente in coda allo sportello resta_aperto.