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


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 ArrayBanconote, i cui elementi sono tabelle di 4 interi. Se a è un valore di tipo ArrayBanconote, a[0] è il numero di banconote da 5 euro, a[1] è il numero di banconote da 10 euro, .... a[3] è il numero di banconote da 50 euro.

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

#define NUM_BANCONOTE   4


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

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


typedef int ArrayBanconote[NUM_BANCONOTE];


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

Esercizio 1: Implementare le seguenti procedure:

void IntroduciBanconote(Distributore* d, ArrayBanconote a, Benzina b);

La funzione IntroduciBanconote modifica lo stato del distributore d modificandone il campo importo aggiungendovi i valori corrispondenti alle banconote presenti nella tabella a che corrisponde alle banconote immesse dal cliente, 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 778.

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