Fondamenti di Informatica 1 - gr. 89 a.a. 2005 - 2006 Prova di Programmazione del 04.09.2006 PILA ESTESA =========== L'ADT pila (modalita' di accesso LIFO) sia definito dalla seguente interfaccia: public interface Stack { void push(Object obj); Object pop(); Object top(); int size(); boolean isEmpty(); void makeEmpty(); } Il metodo push(Object obj) inserisce l'oggetto obj in cima alla pila. Il metodo pop() genera l'eccezione EmptyStackException se la pila e' vuota, altrimenti estrae e restituisce l'oggetto in cima alla pila. Il metodo top() genera l'eccezione EmptyStackException se la pila e' vuota, altrimenti ispeziona l'oggetto in cima alla pila. Il metodo size() restituisce il numero di oggetti presenti nella pila (zero se la pila e' vuota). Il metodo isEmpty() restituisce true se la pila e' vuota, false altrimenti. Il metodo makeEmpty() rende vuota la pila. Si codifichi la classe MyStack che realizza l'interfaccia definita sopra, con le seguenti restrizioni: - le variabili di esemplare della classe devono essere definite con specificatore di accesso private. - i metodi pubblici della classe devono essere solo quelli definiti dall'interfaccia Stack. Si codifichi successivamente la classe public class MyExtendedStack extends MyStack { // parte privata ... // parte pubblica public MyExtendedStack(); public void push(Comparable comp); public Object[] toStackedArray(); public Object[] toQueuedArray(); public Comparable[] toSortedArray(); } Il metodo push(Comparable comp) inserisce nella pila un oggetto comparabile. Il metodo toStackedArray() restituisce un array di oggetti nella sequenza in cui verrebbero estratti dalla pila (LIFO). Il metodo toQueuedArray() restituisce un array di oggetti nella sequenza inversa (FIFO) rispetto a quella in cui verrebbero estratti dalla pila. Il metodo toSortedArray() restituisce un array di oggetti comparabili ordinati. NB: I metodi non devono modificare la pila. Si codifichi, infine, la classe eseguibile di prova Main che: - acquisisce un testo da standard input - lo memorizza, a parole, in un esemplare della classe MyExtendedStack nella sequenza delle parole nel testo (non e' lecito memorizzare localmente il testo). - invia a standard output le parole del testo una per riga nella sequenza originale precedute dalla stringa "\n***Sequenza Diretta***" - invia a standard output le parole del testo una per riga nella sequenza inversa precedute dalla stringa "\n***Sequenza Inversa***" - invia a standard output le parole del testo una per riga in ordine lessicografico precedute dalla stringa "\n***Sequenza in Ordine Lessicografico***". All'atto della correzione il codice verra' compilato e provato con i seguenti comandi: $rm *.class $javac *.java $java Main < testo.txt dove il file testo.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 le classi Scanner e NoSuchElementException del pacchetto java.util. Alla fine della prova il candidato lascera' nella directory di lavoro i file EmptyStackException.java, MyStack.java, MyExtendedStack.java e Main.java che dovranno contenere in testa un commento con nome e cognome del candidato, matricola, data, numero della postazione. Di norma non vengono corretti i file senza l'identificazione dell'autore. 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 _______________________________