Corso di Programmazione - Prova Pratica - 10 gennaio 2001


Anno nuovo, vita nuova. Ed è anche tempo di bilanci. Nel 2000 avevamo fatto un bilancio preventivo relativo alle spese di casa, e con la fine dell'anno possiamo dire se le previsioni erano state accurate o meno. Ma questi due bilanci ci servono soprattutto per definire il nuovo bilancio preventivo, quello relativo al 2001. Lo facciamo in modo pessimista: per ogni voce, se si tratta di un'entrata prenderemo il minimo tra il valore preventivato e quello effettivo, mentre se si tratta di un'uscita, prenderemo il maggiore (in valore assoluto).

Un preventivo è un array di record aventi due campi: il campo voce descrive la tipologia di entrata o uscita (ad esempio: alimentari, stipendio, benzina,...), mentre il campo valore conterrà l'importo relativo a tale voce, che sarà positivo se si tratta di un'entrata e negativo se si tratta di un'uscita. Il numero di voci del bilancio è dato da una costante simbolica N_VOCI.

typedef struct Entry{

char *voce;
int importo;

} Entry;

typedef Entry Bilancio[N_VOCI];


Esercizio 1: Implementare la seguente procedura:

void stampa_bilancio(Bilancio bilancio);

La procedura stampa_bilancio deve stampare a video, uno per riga, gli elementi della tabella passata come parametro attuale, secondo la seguente sintassi:

<voce>: <importo>

Come ultima riga, deve stampare il saldo (ovvero la differenza tra entrate e uscite).


Esercizio 2: Implementare la seguente procedura:

Bilancio* preventivo01(Bilancio preventivo00, Bilancio consuntivo00);

La funzione preventivo01 prende come parametri attuali due tabelle di tipo Bilancio, la prima contenente il bilancio preventivo del 2000 e la seconda quello consuntivo del 2000. La funzione deve restituire una nuova tabella, contenente gli importi preventivati relativi a ciascuna voce in accordo con la visione "pessimista" descritta sopra.


Esercizio 3: Implementare la seguente procedura:

Bilancio* aggiungi_voce(Bilancio bilancio, Entry entry);

La funzione aggiungi_voce prende come parametri attuali una tabella di tipo Bilancio, ed un valore di tipo Entry. Deve restituire una nuova tabella (dinamica) che è la copia della tabella passata con una riga in più, contenente la nuova entry (che si vuole aggiungere) passata come secondo parametro.


La modalità di consegna dell'esame è analoga a quella delle esercitazioni durante il corso: è sufficiente inviarlo come esercitazione numero 103. Bisogna inserire esclusivamente la definizione delle procedure, per consentirne la correzione automatica.