Corso di Programmazione - Prova Pratica -Ottavo Appello - 19 dicembre 2001 - prova 901

L'esame di oggi ha a che fare con una manifestazione di una banda folkloristica.

Il tipo enumerazione Strumento rappresenta il tipo di strumento musicale, che può essere un fiato o una percussione.

Il tipo record Musicista rappresenta un componente della banda, con due campi: id e strumento, di tipo int e Strumento, rispettivamente. Il campo Musicista.id identifica in modo univoco un particolare componente della banda.

Il tipo Fila è una lista semplice di Musicisti.

Il tipo DueFile è una doppia fila ovvero un record i cui due campi sono ognuno una fila di musicisti

	typedef enum Strumento {Fiato, Percussione} Strumento;
typedef struct {int id; Strumento strumento;} Musicista;
typedef struct Fila {Musicista musicista;
struct Fila *prossimo;} Fila; typedef struct { Fila* fila1; Fila* fila2;} DueFile;

Implementare le seguenti procedure:

  1. Fila* Aggiungi_in_Testa(Fila* fila, Musicista s);

    Questa funzione deve restituire la fila ottenuta aggiungendo in testa alla fila di musicisti il musicista s passato come parametro attuale.



  2. DueFile* Separa(Fila* fila);

    Questa funzione "separa" la fila di musicisti in due file: quelli che suonano un fiato da una parte, quelli che suonano percussioni dall'altra.
    La funzione deve restituire l'indirizzo di un record di tipo DueFile, il cui primo campo sarà la lista dei musicisti che suonano un fiato presenti nel parametro fila, ed il secondo campo sarà la lista di tutti i musicisti che suonano le percussioni.
    Attenzione a non "clonare" i musicisti!



  3. Fila* Unisci_Alternando(DueFile* duefile, Fila** resto);

    Questa funzione restituisce la fila di musicisti ottenuta prendendo alternativamente un musicista dalla prima lista di duefile e dalla seconda lista di duefile, facendo "uscire dalla banda" alcuni musicisti se ci sono più strumenti di un tipo che dell'altro. Il valore restituito dovrà quindi essere una lista di musicisti con strumento alternato (un fiato, una percussione, un fiato, una percussione, ecc., ). Non appena una delle due liste finisce, tutti gli sbandieratori che rimangono nell'altra fila devono essere accodati nel parametro di output resto.
    Attenzione a non "clonare" i musicisti!


Per consegnare la prova, inviare una e-mail a cortesi@dsi.unive.it con subject: 901 - cognome - matricola. Il codice corrispondente alle procedure realizzate deve essere inserito nel corpo del messaggio (non in attachment).