FONDAMENTI DI INFORMATICA  modulo B, A+B, F2
12 Settembre 2011

(tempo 2h se scritto, 2h e 30 se al calcolatore)

Esercizio (punti 20)

Un file di tipo testo vocaboli.txt contiene un elenco di parole uniche, una su ciascuna linea. Un secondo file binario (indice.bin) contiene record composti da parola e pagina (valore intero) in cui è citata la parola. Ogni parola compare una sola volta nel primo file, ma può comparire più volte nel secondo.

Tutte le parole sono stringhe contenenti al massimo 20 caratteri, incluso il terminatore.

Si scriva un programma C strutturato in (almeno) tre funzioni dedicate rispettivamente a:

  1. creare un albero binario di ricerca T in memoria centrale, ordinato in base al campo parola, che per ciascuna parola letta dal primo file (vocaboli.txt), memorizza la parola e numero totale di pagine in cui è citata nel secondo file (indice.bin); la funzione funzioneA riceve il puntatore al primo e al secondo file, più altri parametri a scelta, e restituisce un albero T;
  2. accedendo a T, determinare qual è la parola che ha il campo intero associato maggiore (numero totale di pagine maggiore), ovvero la parola più citata; la funzioneB ha come parametri il puntatore all'albero T e la stringa trovata, più altri parametri a scelta, e restituisce il campo intero associato;
  3. stampare il contenuto dell'albero T su un file di uscita, OUTPUT.TXT, con la stampa di una parola e campo intero associato su ogni linea, e restituisca il numero totale di parole; la funzioneC ha come parametri il puntatore all'albero T, il puntatore al file di uscita (più eventuali altri a scelta) e restituisce un intero che viene poi stampato dal main.

Domanda aggiuntiva A+B (ulteriori 30'):

Si inseriscano le prime cinque parole con iniziale 'a' in un vettore V di stringhe di dimensione 5, si ordini tale vettore di stringhe in ordine crescente e se ne stampi il contenuto a video; la funzioneD ha come parametri il puntatore all'albero T e il vettore di stringhe V (più eventuali altri a scelta) e restituisce void. Qualora nell'albero ci siano meno di 5 parole che iniziano col carattere 'a', si inseriscano nell'array V tutte le parole che iniziano per 'a' e si stampino tali parole.


È possibile utilizzare librerie C (ad esempio per le stringhe).

Nel caso si strutturi a moduli l'applicazione qualunque libreria utente va riportata nello svolgimento.