1
Corso di laurea in Informatica AA 2007/08 Programmazione, M.A. Alberti Prova scritta – appello 6 giugno 2008
Cognome Nome
Matricola
1
Data la gerarchia di classi contenuta nel file Squadra.java:
class Squadra{
int atleti;
Squadra (int i){
atleti = i;
System.out.println (“Squadra di: ” + i + ” atleti”) }
}
class Cannottaggio extends Squadra { int timoniere;
Cannottaggio (int atl, int tim) { super(atl);
timoniere = tim;
} }
Completare il codice in modo che non ci siano errori durante la compilazione del file Cannottaggio.java e in modo che il costruttore della classe Cannottaggio possa essere usato per inizializzare un oggetto che rappresenta equipaggi della disciplina sportiva del canottaggio in diverse configurazioni: 2 con o 8 con o 4 doppio. Si ricorda che l’equipaggio 2 con significa che sull’imbarcazione sono disposti due vogatori, ciascuno con un remo e un timoniere.
Nell’equipaggio 8 con invece i rematori sono 8 con un timoniere. Infine, nell’equipaggio 4 doppio i rematori sono 4 con due remi ciascuno e non ci sono timonieri.
Si considerino e si completino le istruzioni seguenti per istanziare equipaggi diversi:
Canottaggio due_con = new Cannottaggio ( 2, 1 );
Canottaggio quattro_doppio = new Cannottaggio ( 4, 0 );
Producono output? Eventualmente indicare:
Squadra di 2 atleti
Squadra di 4 atleti Dire se e’ corretto scrivere
Squadra canoa = due_con; SI
Squadra pallavolo = new Squadra (6); SI
Si disegni lo stato dello heap e dello stack dopo le istruzioni di inizializzazione degli oggetti:
AA 2007/08 Programmazione, Prof. M.A. Alberti Appello 6 giugno 2008
2
stack heap
2
Assumendo le dichiarazioni iniziali seguenti:
final int MAX = 10;
int num = 5;
Stabilire qual’è l’effetto dell’esecuzione dei cicli:
do {
num = num + 1;
if (num*2 > MAX+num)
System.out.println (num);
} while (num <= MAX);
while (num < MAX) { if (num%2 == 0);
System.out.println (num);
num++;
}
11 5
6 7 8 9
3Assumendo la dichiarazione:
Random rand = new Random ();
Indicare il range dei valori delle seguenti dichiarazioni:
rand.nextInt() % 10;
[-9, 9]
(int) (Math.random () * 15);
[0, 14]
Inoltre scrivere un’istruzione per produrre valori paseudo-casuali nell’intervallo:
0 – 10 usando l’oggetto rand
Math.abs(rand.nextInt ()%11)
5 – 25 usando il metodo random() della classe Math
(int)(Math.random()*21) + 5
due_con quattro_doppio
canoa pallavolo
Squadra atleti= 2 Cannottaggio timoniere= 1
Squadra atleti= 4 Cannottaggio timoniere= 0
Squadra atleti = 6
AA 2007/08 Programmazione, Prof. M.A. Alberti Appello 6 giugno 2008
3 4
Scrivere l’espressione booleana che controlla che la variabile numero dichiarata di tipo int appartenga all’intervallo [-5, 5] oppure sia uguale a 99.
(num >= -5 && num <= 5) || num == 99
5
Scrivere il metodo pari() che riporta un valore booleano per indicare se il parametro d’ingresso di tipo intero è pari. Si indichi con precisione il prototipo del metodo.
public boolean pari (int n) {
if (n % 2 == 0) return true;
else return false;
}
6
Scrivere un metodo init() che inizializzi un array con MAX numeri casuali nell’intervallo [0, 20] e lo riporti all’ambiente chiamante. Inoltre, durante l’inizializzazione per ciascun valore generato, venga stampato il messaggio maggiore, uguale o minore di un valore di controllo archiviato nella variabile CONTROLLO.
public static int [] init () { import java.util.Random;
Random rand = new Random ();
int[] vett = new int[MAX];
int num;
for (int i = 0; i <MAX; i++) {
num = Math.abs(rand.nextInt () % 21);
vett[i] = num;
if (num > CONTROLLO)
System.out.println (num + " maggiore " + CONTROLLO);
else if (num == CONTROLLO)
System.out.println (num + " uguale " + CONTROLLO);
else System.out.println (num + " minore " + CONTROLLO);
}
return vett;
}
7Nella classe Sequenze il metodo main chiede il numero dei termini di una particolare sequenza di numeri interi che vengono generati dal metodo di classe funzione. Il metodo in questione, che deve essere implementato in modo ricorsivo, produce la sequenza di interi di lunghezza specificata nel parametro. La legge con cui si generano i numeri deve essere dedotta analizzando con attenzione i primi 10 numeri qui riportati:
0 1 3 7 15 31 63 127 255 511
AA 2007/08 Programmazione, Prof. M.A. Alberti Appello 6 giugno 2008
4 public class Sequenze {
public static void main(String[] args) {
out.print ("Numero termini da calcolare (intero non negativo): ");
int termini = in.readInt();
while (termini < 0) {
out.print("Intero non negativo? Ripetere inserimento: ");
termini = in.readInt();
}
for (int i=0; i<termini; i++) out.print (funzione(i)+"\t");
}
static int funzione (int n) {
if (n == 0) return 0;
else return 2 * funzione (n-1) + 1;
}
}8
Considerate la classe A:
class A {
public int numero;
private String tipo;
A(int n, String t) { numero = n;
tipo = t;
} }
a. E’ possibile la dichiarazione A a; ?
SI
b. E’ corretta l’istruzione a = new A(“cinque”, “base”); ?
NO
c. Possiamo accedere al campo a.numero ?
SI
d. Dopo l’istanziazione dell’oggetto a = new A(25, “standard”);
a.numero contiene il dato
25
a.getTipo() fornisce il dato
“standard”
ammesso che sia definito il metodopublic String getTipo() {
return tipo;
}
e. Scrivete il prototipo del metodo metodo coerente con l’istruzione int num = a.metodo(35);