Testo
Transcript
Testo
Programmazione I 10 febbraio 2011 Matricola: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cognome: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nome: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nei seguenti quesiti (AD ESCLUSIONE DELL’ULTIMO), quando vi è richiesto di scrivere un programma, potete limitarvi al corpo del metodo main, assumendo se necessario che in e out siano due variabili di classe ConsoleInputManager e ConsoleOutputManager (rispettivamente), già dichiarate e inizializzate. 1. Considerate la seguente gerarchia di classi (rappresentata mediante un diagramma UML): A +f(double x): int +f(char x): int fMMM q8 q MMM q q q MMM q q q M qq B +f(double x): int +f(int x): int fMMM MMM MMM M C +f(double x): int +f(String x): int D +f(char x): int +f(int x): int e ipotizzate che tutte le classi abbiano un costruttore pubblico senza argomenti. Assumete le seguenti definizioni e inizializzazioni: B b = new B ( ) ; A c = new D ( ) ; A d = new C ( ) ; Per ciascuna delle seguenti invocazioni di metodo, dire se essa è consentita e in caso affermativo indicare il nome della classe che contiene il metodo che verrà effettivamente eseguito: • d.f( 3 ): . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • c.f( "3d" ): . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . • b.f( 3 + 3.0 ): . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2. Sia la seguente definizione di variabili: int x = 1 ; int y = 2 ; Dite quale sarà il contenuto di x e y dopo l’esecuzione degli assegnamenti indicati: Assegnamento x y y = ( x = y++ ) + ( ( x > y ) ? x++ : ++y ) x = ( "ciao".charAt( y++ ) == "java".charAt( x++ ) ) ? x += y : x++ 3. Sia la seguente definizione di variabili: int x = 2 ; int y = 3 ; boolean b = ( x >= x++ ) ; Dite quale sarà il valore di verità delle seguenti espressioni booleane e quale sarà il contenuto delle variabili x e y dopo la valutazione delle espressioni indicate: Espressione Valore di verità x y x < y && ( b | ( x++ > y ) ) !b || x++ == y++ 4. Considerate il seguente frammento di programma: S t r i n g s = " lucky " ; int k = 0 ; int x = 0 ; while ( x < s . l e n g t h ( ) ) { s = s . s u b s t r i n g ( x++ ) ; k += s . l e n g t h ( ) ; } Quale sarà il valore di k dopo la sua esecuzione? 2 k: . . . . . . . . . . . . . . . . 5. Scrivete un programma che legga una sequenza di oggetti ognuno dei quali può essere un rettangolo oppure una frazione; scegliete il modo a voi più congeniale per terminare l’inserimento di tale sequenza. Successivamente, il programma deve stampare il rettangolo di diagonale maggiore e la frazione col minor denominatore. Se non sono stati inseriti rettangoli, il programma deve stampare un opportuno messaggio; anche nel caso di mancato inserimento di frazioni, va emesso un avviso. ——— Svolgimento qui sotto e sul retro ——— 3 6. Scrivete un programma che legga un brano di n righe, dove n viene preventivamente chiesto all’utente. Successivamente, il programma deve stampare quelle righe contenenti un numero di lettere maiuscole identico a quello dell’ultima riga inserita. [Suggerimento: ricordiamo il metodo statico isUpperCase] ——— Svolgimento qui sotto e sul retro ——— 4 7. Definite una classe, di nome Auto, i cui oggetti rappresentano automobili. Ogni automobile è caratterizzata da una stringa che corrisponde alla marca, da una stringa che rappresenta il modello e da un intero che corrisponde alla cilindrata. La classe deve avere: • l’ovvio costruttore con 3 argomenti; • un costruttore con 2 argomenti in cui si assume che la marca sia sia "Fiat"; • tre metodi getMarca(), getModello() e getCilindrata() dall’ovvio significato; • un metodo toString e un metodo equals dall’ovvio significato (attenzione alla costruzione del metodo equals); • un metodo public boolean stessaCilindrataModello( Auto a ) che restituisce true se l’auto che invoca il metodo ha stessa cilindrata e modello dell’auto a, false altrimenti. La classe Auto va inoltre estesa da una classe AutoEpoca i cui oggetti rappresentano auto d’epoca. Oltre ai parametri che caratterizzano un’auto, un’auto d’epoca deve possedere l’anno di costruzione (tipo int). La classe AutoEpoca, oltre ovviamente al costruttore, deve anche avere: • un metodo toString e un metodo getAnno() dall’ovvio significato; • un metodo public boolean piuVecchia( AutoEpoca e ) che restituisce true se l’auto d’epoca che invoca il metodo è stata costruita prima di quella passata come argomento, false altrimenti. ——— Svolgimento qui sotto e sul retro ——— 5 8. Sfruttando la gerarchia all’esercizio precedente, scrivete un programma GestioneAuto che operi come segue: • accetti a linea di comando un intero positivo che rappresenta la dimensione di un array A entro cui inserire auto e auto d’epoca; • riempia tale array con auto e auto d’epoca chieste all’utente; • stampi la più vecchia auto d’epoca; • se non sono state inserite auto d’epoca, il programma deve stampare l’auto di cilindrata maggiore. ——— Svolgimento qui sotto e sul retro ——— 6