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


L'esame di oggi ha a che fare con il front-office di una Banca.

Un valore di tipo Operazione è un record di 4 campi. Il primo campo rapresenta il tipo di operazione ( deposito o prelievo); il secondo campo, di tipo double, ne rappresenta l'importo (in euro); il terzo campo, di tipo int, rappresenta il numero di conto corrente a cui tale operazione si applica e l'ultimo campo, di tipo double, rappresenta il saldo del conto prima di tale operazione.

Un utente entra in banca, e per eseguire la sua operazione deve mettersi in fila ed aspettare il suo turno. Di fronte ad ogni sportello della banca, ci sarà dunque una lista di operazioni che aspettano di essere evase: un valore di tipo Sportello è una lista semplice di operazioni.



typedef enum TipoOperazione {deposito, prelievo} TipoOperazione;

typedef struct {
	TipoOperazione tipo;
	double importo;

	int num_conto;
	double saldo;
} Operazione;
 

typedef struct Sportello{
	Operazione operazione;	
	struct Sportello* next;
} Sportello;



Esercizio 1: Implementare le seguenti procedure:

void MettiInCoda(Sportello** sportello, Operazione operazione);

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

 

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:

double EvadiOperazione(Sportello** sportello);

La funzione EvadiOperazione modella il fatto che la prima operazione nella fila sportello* venga eseguita e venga quidi tolta dalla lista. La funzione restituisce il nuovo saldo del conto corrente dopo l'esecuzione dell'operazione stessa (se è un prelievo, il saldo dimunuirà dell'importo dato rispetto al saldo precedente; se si tratta di un versamento il saldo verrà incrementato).

Attenzione: la funzione deve liberare (mediante il comando free) la memoria relativa all'elemento di tipo Operazione 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 403.

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).