Corso di Programmazione - Prova Pratica - 15 gennaio 2008


E' Carnevale, e l'esame di oggi vi chiede di gestire una fabbrica di frittelle di ricotta.
Per fare una confezione di frittelle di ricotta ci vogliono:
5 etti di farina, 2 etti di zucchero, 2 arance, 2 etti di ricotta e 2 etti di uvetta.

Ogni confezione di frittelle, una volta prodotta, sarà inserita in un pacco (che può contenere più confezioni) etichettato con il nome del cliente ed inserita in una lista di pacchi pronti per essere ritirati.
Useremo i seguenti tipi


typedef struct {
int farina; /* etti di farina */
int zucchero; /* etti di zucchero */
int arance; /* numero arance */
int ricotta; /* etti di ricotta */
int uvetta; /* etti di uvetta */
} Dispensa;


typedef struct Pacco{
char nome_cliente[10];
int n_confezioni; struct Pacco* next;
} Pacco;


typedef Pacco* ListaPacchi;

Esercizio 1: Implementare la seguente funzione:

int produci(Dispensa* d);

La procedura produci restituisce il numero massimo di confezioni di frittelle che si possono produrre con le quantità presenti nella dispensa *d. All'uscita della funzione, i valori dei campi di *d dovranno ovviamente essere decrementati in ragione degli ingredienti effettivamente consumati.


Esercizio 2: Implementare la seguente procedura:

ListaPacchi aggiungi(ListaPacchi l, char* cliente, int n);

La procedura aggiungi aggiunge in coda alla lista l un nuovo pacco, destinato al cliente di nome cliente, e contenente n confezioni di frittelle.


Esercizio 3: Implementare la seguente procedura:

void ritira(ListaPacchi* l, char* cliente);

La procedura ritira deve eliminare dalla lista l un pacco corripondente al cliente di nome cliente, se questi è presente nella lista.


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