Corso di Programmazione - Prova Pratica - 10 gennaio 2001


Stiamo rifacendo ordine nei nostri cassetti, e ci siamo accorti che l'anno scorso avevamo due rubriche telefoniche: alcuni numeri li avevamo scritti in entrambe, altri solo in una delle due. Con l'inizio del nuovo anno è decisamente il caso di gettarle via entrambe, e di costruire una nuova rubrica, contenente tutti i numeri di telefono (senza ripetizioni) in nostro possesso.

Una rubrica sarà un puntatore ad un valore di tipo Rubrica, ovvero una lista semplice i cui elementi sono record aventi come campi il cognome, il nome, il prefisso ed il numero di telefono di una persona:

typedef struct Persona{

char *cognome;
char *nome;
char *prefisso;
int telefono;

} Persona;

typedef struct Rubrica{

Persona persona;
struct Rubrica *next;

}Rubrica;


Esercizio 1: Implementare la seguente procedura:

void stampa_rubrica(Rubrica *rubrica);

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

<cognome> <iniziale del nome> : (<prefisso>) <numero>


Esercizio 2: Implementare la seguente procedura:

Rubrica* unisci(Rubrica *rubrica1, Rubrica *rubrica2);

La funzione unisci prende come parametri attuali due listedi tipo puntatore a Rubrica, che si assumono essere ordinate secondo l'ordine lessicografico (per cognome e nome). Deve restituire una nuova lista, anch'essa ordinata in ordine lessicografico, contenente tutti gli elementi distinti delle due liste passate: questo significa che la stessa persona potrà apparire più volte nella nuova rubrica solo se ha più di un numero telefonico (ad esempio quello del telefono di casa ed il cellulare).


Esercizio 3: Implementare la seguente procedura:

void inserisci(Rubrica **rubrica, Persona persona);

La procedura inserisci prende come parametri attuali l'indirizzo di una rubrica, che si assume essere ordinata secondo l'ordine lessicografico, ed un valore di tipo Persona. Deve inserire nella lista passata un nuovo elemento con valore persona, se non è già presente nella lista, mantenendo la lista ordinata.


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