Fondamenti di Informatica - a.a.
2019-2020
Prova pratica di programmazione del 28 Gennaio 2020
ESERCIZIO 1: RICORSIONE (10 punti)
Scrivere nella classe [Link] il metodo:
public static int conditionalCountLinesRecursion(Scanner in) throws
IOException {...}
che implementa un algoritmo ricorsivo per contare le righe del file di testo dato che iniziano
con i due caratteri: ->
Provare il programma col file [Link] fornito.
È valutato 10 punti se risponde alle specifiche, 0 punti se presenta errori di compilazione.
Alla fine della prova il candidato lascerà nella directory di lavoro il file modificato
[Link], e [Link]. Il file prodotto dal candidato dovrà contenere il nome e
cognome, matricola, data, numero della postazione.
ESERCIZIO 2: TOUR OPERATOR (punti 20)
L'ADT dizionario è definito dalla seguente interfaccia:
public interface Dictionary extends Container
{
void insert(Comparable key, Object attribute);
Object find(Comparable key);
Object remove(Comparable key);
}
I metodi dell'interfaccia Dictionary eseguono le seguenti funzioni:
- insert(...) inserisce la coppia (key, attribute) nel dizionario. Se la chiave è già
presente, sovrascrive la coppia;
- find(...) restituisce l'attributo associato alla chiave key nel dizionario. Se la chiave non è
presente, genera l'eccezione [Link];
- remove(...) elimina la coppia (key, attribute) dal dizionario e restituisce l'attributo
associato alla chiave se questa è presente. Se la chiave non è presente, genera l'eccezione
[Link].
I metodi dell'interfaccia Container eseguono le seguenti funzioni:
- isEmpty() ritorna true se il contenitore è vuoto, false altrimenti;
- makeEmpty() rende vuoto il contenitore;
- size() restituisce il numero di elementi inseriti nel contenitore.
Un’agenzia di viaggi commissiona un dizionario che contenga le seguenti informazioni relative
ai propri clienti:
- codice identificativo del cliente (chiave)
- nome cliente (attributo)
- destinazione del viaggio (attributo)
Il codice identificativo del cliente sia composto da quattro caratteri alfanumerici con il seguente
formato Lnnn, dove L è un carattere alfabetico compreso nell'intervallo [A, Z], mentre n è un
carattere numerico compreso nell'intervallo [0, 9]. Es: A199 è un codice cliente valido.
Il candidato scriva i metodi:
public void add(String nome, String dest) { // metodo invocato dal
main per l'inserimento ...} (punti 8)
private void increment(String code) { ... } (punti 12)
nella classe eseguibile:
public class TourOperator implements Dictionary
È valutato 0 punti se presenta errori di compilazione.
Il costruttore public TourOperator(String initialClientCode) inizializza la struttura
dati e imposta la variabile di esemplare String nextClientCode col valore passato nel
parametro String initialClientCode.
Il metodo add inserisce i dati: (codice, nome, destinazione) nel dizionario. Successivamente
incrementa il codice cliente.
Il metodo increment effettua l’incremento del codice cliente come segue:
- se il numero nnn rappresentato dai caratteri numerici è inferiore a 999 si incrementa
semplicemente il numero;
- altrimenti si impostano i caratteri numerici alla stringa "000" e si incrementa il carattere
alfabetico L al successivo nell'ordine lessicografico.
Esempio: se il codice cliente vale C998, il codice successivo vale C999 (998 diventa 999,
mentre C resta immutato); se il codice cliente vale C999 il codice successivo vale D000 (999
diventa 000, mentre C diventa D).
All'atto della correzione il codice verra' provato nel seguente modo:
$ rm *.class
$ javac *.java
$ java TourOperator A998 < [Link]
dove A998 è la stringa da riga di comando e il file [Link] è allegato.
Nell'esecuzione della prova si possono usare solo le classi dei pacchetti [Link] e le classi
Scanner e NoSuchElementException del pacchetto [Link].
Alla fine della prova il candidato lascerà nella directory di lavoro il file [Link]
che dovrà contenere in testa un commento con nome e cognome del candidato, matricola, data,
numero della postazione.
FONDAMENTI DI INFORMATICA - a.a. 2019-2020 - (prof. Sergio Canazza)
Nome e Cognome _____________________________________________________________
Matricola ________________________ Postazione _________________________________
☐ Consegno l'elaborato. ☐ Non consegno l’elaborato e mi ritiro dall’esame.
Firma _______________________________