Corso di Programmazione - Prova Pratica - 5 settembre 2003 - prova 555


Quando si vuole confrontare il costo della vita di un paese rispetto ad un altro si costruisce un "paniere" di prodotti e rispetto ad essi si confrontano i prezzi. Ma in stati diversi ci sono spesso valute diverse (euro, dollari, sterline,...) ed anche unita' di misura diverse (chili, libbre, ecc.).

Una volta fissato un certo numero N di generi di consumo che formano il paniere (il tipo enumerazione Paniere), un valore di tipo Prezzi sara` un record i cui campi sono valuta, misura ed una tabella di lunghezza N con i prezzi (in quella valuta, e relativamente a quella unita` di misura) degli N prodotti che vengono considerati.

Per semplicita' conderiamo qui solo tre valute (dollaro, sterlina ed euro), due unita' di misura (kg e libbra) e 4 prodotti : pane, zucchero, caffe' e mele.

Ad esempio, un valore prezzi_a_venezia di tipo Prezzi puo' avere nel campo valuta il valore EUR, nel campo misura il valore kg e nel campo tabella l'array {0.5, 1.0, 3.0, 2.0}. Tale valore rappresenta i prezzi in euro per chilo di pane, di zucchero, di caffe' e di mele, rispettivamente, che possono essere rilevati a Venezia.


/*  1 libbra = 0.45 kg                                     */
/*  1 euro (EUR) = 1.08 dollari (USD) = 0.69 sterline (GBP) */


#define N 4


typedef enum Valuta {EUR, USD, GBP} Valuta;
typedef enum Misura {libbra, kg} Misura; typedef enum Paniere {pane, zucchero, caffe, mele} Paniere; typedef double Tabella[N]; typedef struct Prezzi{
Valuta valuta;
Misura misura;
Tabella tabella;
} Prezzi;

Esercizio 1: Implementare la seguente funzione:

Prezzi converti(Prezzi p, Valuta v, Misura m);

La funzione converti provvede alla conversione di un valore di tipo Prezzi in un valore corrispondente al variare della valuta e/o del sistema di misura.
Ad esempio, se la funzione viene chiamata passandole come parametri attuali, rispettivamente, il valore prezzi_a_venezia citato prima, EUR e libbra, dovra' restituire un valore che ha EUR nel campo valuta, libbra nel campo misura e {0.225, 0.45, 1.35, 0.9} nel campo tabella. Questo ci dice ad esempio che pagare 1 euro per un kg di zucchero e' la stessa cosa che pagare 45 centesimi di euro per una libbra dello stesso prodotto.
Se invece si chiama converti passandole prezzi_a_venezia, GBP e libbra, nel campo tabella del valore restituito ci aspettiamo che ci sia {0.155, 0.31, 0.93, 0.62}. Questo ci dice ad esempio che pagare 1 euro per un kg di zucchero a Venezia corrisponde a pagare 0.31 sterline per una libbra di zucchero a Londra.


Esercizio 2: Implementare la seguente procedura:

void stampa(Prezzi p);

La procedura stampa deve fornire a video una rappresentazione dello stato dei campi del valore di tipo Prezzi passato come parametro attuale.


Esercizio 3: Implementare la seguente funzione:

Prezzi leggi();

Questa funzione deve restituire un valore di tipo Prezzi che contenga nei propri campi dei valori chiesti e forniti dall'utente.


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

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