FONDAMENTI DI INFORMATICA 1 - CA. 89 - A.A. 2007-08 PROVA DI PROGRAMMAZIONE DEL 9-1-2008 TELECOMUNICAZIONI ================= L'ADT dizionario e' un contenitore di coppie chiave/attributo - con chiave univoca - definito dalla seguente interfaccia: public interface Map //--ADT dizionario { int size(); void insert(Comparable key, Object x); Object find(Comparable key) throws java.util.NoSuchElementException; void remove(Comparable key) throws java.util.NoSuchElementException; } dove i metodi svolgono le seguenti operazioni: - size : restituisce il numero di coppie presenti nel contenitore - insert : se la chiave non e' presente, inserisce la coppia key/x nel dizionario, altrimenti sovrascrive la coppia presente con la coppia key/x; - find : se la chiave e' presente nel dizionario restituisce l'attributo associato, altrimenti genera l'eccezione java.util.NoSuchElementException - remove : se la chiave e' presente elimina la coppia key/x dal dizionario, altrimenti genera l'eccezione java.util.NoSuchElementException Il candidato codifichi la seguente classe public class MyMap implements Map { //parte privata ... public MyMap() {...} } dove il costruttore inizializza un dizionario vuoto. Nella realizzazione tutte le variabili di esemplare dovranno avere specificatore di accesso privato e non sara' possibile definire metodi pubblici oltre a quelli specificati nell'interfaccia Map. Il candidato codifichi successivamente la seguente classe public class TLC extends MyMap { public TLC() {...} public void insert(String key, int n) {...} public int find(String key) {...} } dove i metodi eseguono le seguenti operazioni: - insert: sovrascrive il metodo omonimo della superclasse; se la chiave non e' presente inserisce la coppia key/n nel dizionario altrimenti, detto p l'attributo associato alla chiave, sovrascrive la coppia presente con la coppia key/(p + n) - find : sovrascrive il metodo omonimo della superclasse; se la chiave e' presente nel dizionario restituisce l'attributo associato (un intero), altrimenti genera l'eccezione java.util.NoSuchElementException SUGGERIMENTI: nella realizzazione dei metodi della classe TLC: - sfruttare i metodi di superclasse - usare le classi involucro In sede di correzione il codice sara' provato con i comandi: $rm *.class $javac TLCTester.java $java TLCTester telecom.txt dove telecom.txt e' il file allegato e TLCTester e' la classe seguente: import java.io.*; import java.util.*; public class TLCTester {public static void main(String[] args) throws IOException { Scanner in = new Scanner(new FileReader(args[0])); Vector v = new Vector(); TLC tlc = new TLC(); while (in.hasNext()) { Scanner tok = new Scanner(in.next()); tok.useDelimiter("[:]+"); String k = tok.next(); v.add(k); tlc.insert(k, Integer.parseInt(tok.next())); tok.close(); } in.close(); Object[] w = v.toArray(); Arrays.sort(w); System.out.println("***NUMERO DI COPPIE NEL DIZIONARIO PIENO: " + tlc.size() + "***"); System.out.println("***ISPEZIONE E RIMOZIONE COPPIE NEL DIZIONARIO PIENO***"); for (int i = 0; i < w.length; i++) { try { System.out.println(w[i]+ ":" + tlc.find((String)w[i])); tlc.remove((String)w[i]); } catch (NoSuchElementException e) { } } System.out.println("***NUMERO DI COPPIE NEL DIZIONARIO VUOTO: " + tlc.size() + "***"); } } Nella realizzazione delle classi MyMap e TLC non e' lecito usare classi della Java Platform API, ad eccezione di quelle del pacchetto java.lang e della classe java.util.NoSuchElementException. Di norma gli elaborati che generano errori in compilazione sono valutati insufficienti. Alla fine della prova il candidato lascera' nella directory di lavoro i seguenti file: MyMap.java, TLC.java, TLCTester.java, Map.java ed telecom.txt. I file MyMap.java e TLC.java dovranno contenere come prima riga un commento con nome e cognome del candidato, matricola, data, numero della postazione. ------------------------------------------------------------------------------- Cognome ______________________________ Nome _________________________________ Matricola _______________ Corso di Laurea _______________ Postazione __________ ------------------------------------------------------------------------------- Consegno l'elaborato che consiste dei seguenti file (contrassegnare con X): [] MyMap.java [] TLC.java Firma ________________________________ ------------------------------------------------------------------------------- Non consegno l'elaborato e mi ritiro dall'esame. Firma ________________________________ -------------------------------------------------------------------------------