Fondamenti di Informatica 1 - gr. 89 - a.a. 2005 - 2006 Prova di Programmazione - 11.01.2006 ORACOLO DILETTANTE ================== L'ADT dizionario e' 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 e' gia' presente, sovrascrive la coppia. - find(...) restituisce l'attributo associato alla chiave key nel dizionario. Se la chiave non e' presente, genera l'eccezione java.util.NoSuchElementException. - remove(...) elimina la coppia (key, attribute) dal dizionario e restituisce l'attributo associato alla chiave se questa e' presente. Se la chiave non e' presente genera l'eccezione java.util.NoSuchElementException L'interfaccia Container e' cosi' definita: public interface Container { boolean isEmpty(); void makeEmpty(); int size(); } I metodi dell'interfaccia Container eseguono le seguenti funzioni: - isEmpty() ritorna true se il contenitore e' vuoto, false altrimenti - makeEmpty() rende vuoto il contenitore - size() restituisce il numero di elementi inseriti nel contenitore Si scriva il codice della classe D che realizza l'interfaccia Dictionary: public class D implements Dictionary {...} Si scriva successivamente la seguente classe eseguibile Oracolo che estende la classe D: public class Oracolo extends D // classe Oracolo { // parte privata ... public static final String[] RISPOSTA = {"Certamente si'", "Forse si'", "Non e' lecito sapere", "Chi vivra', vedra'", "Oscuro e' il futuro", "Forse no", "Certamente no"}; public String rispondi(String domanda) {...} public static void main(String[] args) {...} } Il metodo String rispondi(...) elabora una risposta alla domanda passata come parametro esplicito al metodo. La stringa domanda contenga una domanda a cui sia possibile rispondere affermativamente o negativamente. La strategia di elaborazione della risposta sia la seguente: - il metodo ricerca nel dizionario con chiave String domanda. Se la chiave e' presente ritorna l'attributo della chiave; se la chiave non e' presente genera casualmente una delle seguenti risposte: "Certamente si'", "Forse si'", "Non e' lecito sapere", "Oscuro e' il futuro", "Chi vivra', vedra'", "Forse no", "Certamente no" e inserisce la coppia (domanda, risposta) nel dizionario. Per la generazione casuale si usi la classe java.util.Random. Il metodo main(...) esegua le seguenti azioni: - istanzia un esemplare della classe Oracolo - legge da standard input un insieme di domande, una per riga, finche' non viene introdotta la stringa vuota; - a ciascuna domanda risponde invocando il metodo String rispondi(...) - stampa la domanda e la relativa risposta. All'atto della correzione il codice verra' provato nel seguente modo: $java Oracolo < iliade.txt dove il file iliade.txt e' allegato. Di norma sono valutati insufficienti i compiti che presentano errori di compilazione. Nell'esecuzione della prova si possono usare solo le classi dei pacchetti java.lang e java.io e le classi Scanner, Random e NoSuchElementException del pacchetto java.util. Non e' lecito aggiungere metodi pubblici alle classi D e Oracolo oltre a quelli sopra definiti. Alla fine della prova il candidato lascera' nella directory di lavoro i seguenti file: Dictionary.java, Container.java, D.java, Oracolo.java. I file dovranno contenere come prima riga un commento con nome e cognome del candidato matricola, data, numero della postazione. FONDAMENTI DI INFORMATICA I (gruppo 8-9) a.a. 2005 - 2006 Cognome e Nome ___________________________________ Matricola ___________________________________ Corso di Laurea ___________________________________ Postazione ___________________________________ Consegno l'elaborato che consiste dei seguenti file: _____________________________________________________ _____________________________________________________ _____________________________________________________ Firma _______________________________ Non consegno l'elaborato e mi ritiro dall'esame. Firma _______________________________