Fondamenti di Informatica 1 - gr. 89 a.a. 2005 - 2006 Prova di Programmazione del 18.09.2006 PILA+CODA ESTESA ================ La seguente interfaccia definisca un contenitori di dati disposti in sequenza con modalita' di accesso sia FIFO sia LIFO: public interface StackAndQueue { void pushAndEnqueue(Object obj); Object top() throws EmptyStackException; Object pop() throws EmptyStackException; Object getFront() throws EmptyQueueException; Object dequeue() throws EmptyQueueException; int size(); boolean isEmpty(); void makeEmpty(); } Il metodo pushAndEnqueue(Object obj) inserisce l'oggetto obj nel contenitore. Il metodo top() genera l'eccezione EmptyStackException se il contenitore e' vuoto, altrimenti restituisce, senza estrarlo, l'ultimo elemento inserito nel contenitore (LIFO). Il metodo pop() genera l'eccezione EmptyStackException se il contenitore e' vuoto, altrimenti estrae e restituisce l'ultimo elemento inserito nel contenitore (LIFO). Il metodo getFront() genera l'eccezione EmptyQueueException se il contenitore e' vuoto, altrimenti restituisce, senza estrarlo, il primo elemento inserito nel contenitore (FIFO). Il metodo dequeue() genera l'eccezione EmptyQueueException se il contenitore e' vuoto, altrimenti estrae e restituisce il primo elemento inserito nel contenitore (FIFO). Il metodo size() restituisce il numero di elementi presenti nel contenitore (zero se il contenitore e' vuoto). Il metodo isEmpty() restituisce true se il contenitore e' vuoto, false altrimenti. Il metodo makeEmpty() rende vuoto il contenitore. Si codifichi la classe MySQ che realizza l'interfaccia definita sopra, con le seguenti restrizioni: - le variabili di esemplare della classe devono essere definite con specificatore di accesso private. - possono essere programmati nella classe solo metodi privati, oltre ai metodi pubblici definiti dall'interfaccia StackAndQueue. Si codifichi successivamente la classe: public class MyExtendedSQ extends MySQ { // parte privata ... // parte pubblica public MyExtendedSQ(); public void rotateQueue(); public void rotateStack(); } Il metodo rotateQueue() estrae l'elemento in fronte alla coda e lo riaccoda. Es: se la sequenza degli elementi e' C B A, dove A e' il primo elemento (fronte) e C l'ultimo, l'invocazione del metodo rotateQueue() modifica la sequenza come segue: A C B, dobe B e' il primo elemento e A l'ultimo (A viene estratto e riaccodato). Il metodo rotateStack() estrae l'ultimo elemento inserito nel contenitore e lo inserisce in testa alla coda. Es: se la sequenza degli elementi e' C B A, dove C e' l'ultimo elemento inserito e A il primo, l'invocazione del metodo rotateStack() modifica la sequenza come segue: B A C dove C e' il primo elemento e B e' l'ultimo (C viene estratto e inserito in testa alla sequenza). 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 MyExtendedSQ 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 FIFO precedute dalla stringa "\n***Sequenza originale in coda***" - invoca rotateQueue(); - invoca due volte di seguito rotateStack() - invia a standard output gli elementi del contenitore una per riga nella sequenza FIFO precedute dalla stringa "\n***Sequenza modificata in coda***" 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, EmptyQueueException.java,MySQ.java, MyExtendedSQ.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 _______________________________