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.