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