<-- Torna alla lista delle soluzioni
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. */
void MettiInCoda(Sportello *s, Prenotazione p) {
Sportello newEl, temp;
newEl = (Sportello)malloc(sizeof(Elem_Sportello));
newEl->prenotazione = p;
newEl->next = NULL;
if (*s == NULL) {
*s = newEl;
}
else {
temp = *s;
while(temp->next != NULL) {
temp = temp->next;
}
temp->next = newEl;
}
}
char getSala(Sala s) {
switch(s) {
case A:
return 'A';
case B:
return 'B';
case C:
return 'C';
case D:
return 'D';
}
}
void Stampa(Sportello s) {
printf("La situazione allo sportello è la seguente:\n");
printf("Codice Fiscale\t\tSala\n");
while(s != NULL) {
printf("%s\t\t%c\n", s->Prenotazione.CF, getSala(s->prenotazione.sala)):
s = s->next;
}
}
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. */
int EvadiPrenotazione(Sportello *ptr_s) {
Sportello testa = NULL;
if(*ptr_s == NULL) {
return 0;
}
if(prenotazioni[(*ptr_s)->prenotazione.sala] < CAPIENZA[(*ptr_s)->prenotazione.sala]) {
testa = *ptr_s;
prenotazioni[(*ptr_s)->prenotazione.sala]++;
*ptr_s = (*ptr_s)->next;
free(testa);
return 1;
}
return 0;
}
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. */
void ChiudiSportello(Sportello *restaAperto, Sportello *siChiude) {
Sportello aux = *restaAperto;
if(*restaAperto == NULL) {
*restaAperto = *siChiude;
}
else {
while(aux->next != NULL) {
aux=aux->next;
}
aux->next = *siChiude;
}
*siChiude = NULL;
}
