Corso di Programmazione - Prova Pratica - Terzo Appello - 19 giugno 2003 - prova 777


L'esame di oggi ha a che fare con un distributore di benzina.

Un valore di tipo Benzina può essere Super, o Diesel. Il suo costo è desumibile dalla tabella costante COSTO: COSTO[Super] è il costo di un litro di benzina Super, che nel nostro caso è di 1 euro e 15 centesimi.

Per mettere benzina o gasolio nella propria macchina un cliente deve inserire delle banconote da 5,10, 20 o 50 euro. Queste sono rappresentate da valori del tipo enumerazione Banconota. Di banconote, in genere non ne basta una, ed a questo serve il tipo ListaBanconote, i cui valori sono liste semplici di elementi di tipo Banconota.

Un distributore di benzina, di tipo Distributore, lo possiamo pensare come un record di due campi: il campo tipo_benzina di tipo Benzina ci dice che tipo di propulsore uno ha scelto (super o diesel), mentre il campo importo ci dice la somma totale del denaro immesso nel distributore.

#define NUM_BENZINE   2


typedef enum Benzina {Super, Diesel} Benzina;
const double COSTO[NUM_BENZINE] = {1.15, 0.89};

typedef enum Banconota {cinque, dieci, venti, cinquanta} Banconota;


typedef struct ListaBanconote{
	Banconota banconota;
	struct ListaBanconota* prossima;
} ListaMonete;


typedef struct Distributore{
	Benzina tipo_benzina;
	double importo;
} Distributore;

Esercizio 1: Implementare le seguenti procedure:

void IntroduciBanconote(Distributore* d, ListaBanconote ls, Benzina b);

La funzione IntroduciBanconote modifica lo stato del distributore d modificandone il campo importo aggiungendovi i valori corrispondenti alle banconote presenti nella lista di banconote ls e assegnando al campo tipo_benzina il valore passato nel parametro b.


Esercizio 2: Implementare la seguente funzione:

double Eroga(Distributore* d);

Questa funzione simula la richiesta di erogazione di benzina: restituisce il numero di litri che il distributore deve erogare e annulla il valore del campo importo del distributore d (in attesa di un nuovo cliente che metta altri soldi!).


IMPORTANTE:
La modalità di consegna dell'esame
è analoga a quella delle esercitazioni durante il corso: è sufficiente inviarlo come esercitazione numero 777.

Bisogna inserire esclusivamente la definizione delle funzioni richieste ed eventuali procedure o funzioni ausiliarie, per consentirne la correzione automatica.