Fondamenti di Informatica 1 - gr. 89 Prova di Programmazione del 15.09.2008 a.a. 2007 - 2008 QUOTE AZIONARIE =============== Si scriva un'applicazione java per gestire la variazione delle quote azionarie di una societa' quotata in borsa. A tal fine si considerino l'interfaccia Dictionary e la classe D definite di seguito. L'interfaccia Dictionary definisce un dizionario, ovvero un contenitore di coppie chiave/attributo con chiave univoca (non possono essere presenti nel contenitore due coppie con la medesima chiave) dove la chiave e' una stringa e l'attributo e' un numero intero. public interface Dictionary // --Dizionario { boolean isEmpty(); int size(); void insert(String key, int x); int find(String key); int remove(String key); } dove: - boolean isEmpty() restituisce true se il contenitore e' vuoto, false altrimenti; - int size() restituisce il numero di coppie presenti nel contenitore; - void insert(String key, int x) se la chiave key non e' presente nel contenitore vi inserisce la coppia key/x, altrimenti sovrascrive la coppia di chiave key; - int find(String key): se la chiave key e' presente nel contenitore restituisce l'attributo associato, altrimenti lancia l'eccezione java.util.NoSuchElementException; - int remove(String key): se la chiave key e' presente nel contenitore rimuove la coppia key/x restituendo l'attributo, altrimenti lancia l'eccezione java.util.NoSuchElementException; La seguente classe D realizza l'interfaccia Dictionary: public class D implements Dictionary // --Dizionario { // parte privata ... // parte pubblica public D() {...} public String[] toSortedArray() {...} } dove: - il costruttore inizializza un dizionario vuoto; - String[] toSortedArray() restituisce in un array ordinato le coppie del dizionario come stringhe, una per elemento dell'array, nel formato chiave + " " + attributo La classe eseguibile DTester, di prova della classe D, definisce il solo metodo pubblico main che esegue le seguenti azioni - legge da file un insieme di coppie, una per riga, nel formato chiave attributo1 e le inserisce nel dizionario; se nella riga non e' presente l'attributo1 o non e' un numero intero, scarta la coppia. Il nome del file e' passato come argomento nella riga di comando; - legge successivamente da standard input un insieme di coppie, una per riga, nel formato chiave attributo2; anche in questo caso la chiave e' una stringa e attributo2 e' un numero intero. Se nella riga non e' presente l'attributo2 o non e' un numero intero, scarta la coppia. Se la chiave non e' presente nel dizionario inserisce la coppia chiave/attributo2 nel dizionario, altrimenti modifica l'attributo della coppia presente nel seguente modo attributo = attributo1 + attributo2 - stampa il contenuto del dizionario tramite il metodo toSortedArray() Il candidato scriva la parte privata e completi la parte pubblica delle classi D e DTester. Saranno considerate ottime quelle soluzioni della classe D in cui il metodo find ha andamento asintotico della complessita' temporale migliore di O(n). In sede di correzione il codice sara' provato con i comandi: $rm *.class $javac DTester.java $java DTester < variazione.txt alitalia.txt dove variazione.txt e alitalia.txt sono file allegati. Nella realizzazione delle classi D e DTester non e' lecito: - aggiungere elementi, se non privati; - usare classi della libreria standard, ad eccezione di quelle dei package java.lang e java.io e delle classi java.util.Scanner e java.util.NoSuchElementException. Alla fine della prova il candidato lascera' nella directory di lavoro i file eventualmente prodotti: D.java, DTester.java e i file allegati dal docente: Dictionary.java, variazione.txt e alitalia.txt. I file prodotti dal candidato dovranno contenere come prima riga un commento con nome e cognome, matricola, data, numero della postazione. Gli elaborati che generano errori in compilazione sono giudicati, di norma, insufficienti. ------------------------------------------------------------------------------- Cognome ______________________________ Nome _________________________________ Matricola _______________ Corso di Laurea _______________ Postazione __________ ------------------------------------------------------------------------------- Consegno l'elaborato che consiste dei seguenti file (contrassegnare con X): [] D.java [] DTester.java Firma ___________________________ ------------------------------------------------------------------------------- Non consegno l'elaborato e mi ritiro dall'esame. Firma ________________________________ -------------------------------------------------------------------------------