Programmazione ed
Esercitazioni di Programmazione


<-- 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;
}


<-- Torna alla lista delle soluzioni