Corso di Programmazione - Prova Pratica - 15 gennaio 2008


E' Carnevale, e l'esame di oggi vi chiede di gestire una fabbrica di coriandoli.
Per fare una confezione di coriandoli ci vogliono:
5 fogli di carta colorata, 1 scacchetto di plastica e 1 etichetta.
Ogni confezione di coriandoli, 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 fogli; /* fogli di carta colorata */
int sacchetti; /* sacchetti di plastica */
int etichette; /* etichette */
} Magazzino;


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(Magazzino* d);

La procedura produci restituisce il numero massimo di confezioni di coriandoli che si possono produrre con le quantità presenti nel magazzino *d. All'uscita della funzione, i valori dei campi di *d dovranno ovviamente essere decrementati in ragione dei prodotti effettivamente utilizzati.


Esercizio 2: Implementare la seguente procedura:

ListaPacchi aggiungiPacco(ListaPacchi l, char* cliente, int numero_confezioni);

La procedura aggiungiPacco aggiunge in coda alla lista l un nuovo pacco, destinato al cliente di nome cliente, e contenente numero_confezioni confezioni di coriandoli.


Esercizio 3: Implementare la seguente procedura:

void spostaPacco(ListaPacchi* l);

La procedura spostaPacco deve spostare il pacco in testa alla lista alla fine della lista stessa.


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