Corso di Laurea in Informatica

Programmazione

M. A. Alberti
Università degli Studi di Milano
A.A. 2003/04

Soluzioni I compitino - 5 novembre 2003

Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14

Esercizio 1

Risposte
  1. Automobile autoRossa = new Automobile(60.5);
    Automobile autoBlu = new Automobile();
  2. autoBlu.rifornire(30);
  3. autoRossa.consumare(40.3);
  4. autoRossa.livello() riporta il valore 20.2 a meno di arrotondamenti
    autoBlu.livello() riporta il valore 30.0
  5. Sì sono corrette, perché l'assegnamento dei valori ai parametri del metodo rispetta la compatibilità tra tipi di dato. Infatti, il metodo livello() riporta un valore double che può essere passato come valore attuale al parametro formale quanto pure di tipo double
  6. autoRossa.livello() riporta il valore 70.4
    autoBlu.livello() riporta il valore 50.2
  7. Il metodo non_si_sa(Automobile, double) assegna un nuovo livello del serbatoio (ottenuto sottraendo dal livello della macchina passata come parametro il quantitativo, pure passato come parametro) alla macchina a cui viene lanciato il messaggio. Inoltre il metodo riassegna al serbatoio della macchina passata come parametro un livello pari a quello iniziale. Nell'istruzione autoRossa.non_si_sa(autoBlu, 10); autoRossa è l'oggetto cui viene lanciato il messaggio e autoBlu il parametro del metodo
  8. autoRossa.livello() riporta il valore 40.2
    autoBlu.livello() riporta il valore 50.2

Si vedano le classi TestAutomobile.java e Automobile.java.

Esercizio 2

Soluzione
public void trasferisci (Automobile da, double ammontare)
{
   this.rifornire(ammontare);
   da.consumare(ammontare);
}
Eseguendo ora autoRossa.trasferisci(autoBlu, 10.5) otteniamo:
il valore 50.7 dal metodo autoRossa.livello()
il valore 39.7 dal metodo autoBlu.livello()

Si vedano le classi TestAutomobile.java e Automobile.java.

Esercizio 3

Risposte
  1. public class AutomobileBis
    {
    	private double serbatoio;
    	public String colore;
    	private String tipo;
    	...
    	public AutomobileBis(double serbatoioIniziale, String tipo, String colore)
    	{
    		serbatoio = serbatoioIniziale;
    		this.tipo = tipo;
    		this.colore = colore;
    	}
    }
    
  2. public String colore;
  3. Se la dichiarazione fosse stata: private String colore; allora per accedere al dato del campo colore dall'esterno della classe avremmo dovuto poter disporre di un metodo pubblico, public String getColore().
  4. public String getColore()
    {
    	return this.colore;
    }
    

Si veda il programma TestAutomobileBis.java e AutomobileBis.java.

Esercizio 4

Risposte
Le tre istruzioni di stampa del campo statico danno come output:
  1. 0
  2. 1
  3. 2
  4. 2

Si vedano le classi TestAutomobile.java e Automobile.java.

Esercizio 5

Risposte
  1. tra -5 e 5
  2. tra 0 e 5
  3. rand.nextInt() % 8);
  4. (int)(Math.random() * 11) + 4;

Si veda il programma Numeri_random.java.

Esercizio 6

Soluzione
Rettangolo (int x, int y, Rettangolo unRettangolo)
{
   this.x = x;
   this.y = y;
   this.amp = unRettangolo.amp;
   this.alt = unRettangolo.alt;
}
Si vedano le classi TestRettangolo.java e Rettangolo.java.

Esercizio 7

Risposta
Il nuovo costruttore costituisce un sovraccaricamento o overloading del costruttore dato in precedenza.

Esercizio 8

Risposte
  1. 1<=n && n<10
  2. n<1 || 10<=n
Si veda la classe Test8.java.

Esercizio 9

Risposta
formula = 4/3 pi_greca r3 + radice_quadrata(1+r2)

Esercizio 10

Risposta
double final S_INIZIALE = 234.0;
float final V_INIZIALE = 4.5;
double final GRAV = 6.67E-11
double s;
s = S_INIZIALE + V_INIZIALE * t + (1/2) * GRAV * Math.pow(t, 2);
Le parentesi attorno alla frazione 1/2 non sono necessarie ma aiutano nella lettura. Tenendo conto del significato della formula g che indica la gravità avrebbe potuto essere definita costante. Gli identificatori S_INIZIALE e V_INIZIALE rappresentano le variabili spazio e velocità iniziali e perciò sono definite costanti come pure la costante di gravità. Tutte le grandezze si devono pensare espresse nel sistema S.I. (Sistema Internazionale di misura)

Esercizio 11

Risposte
La stringa riga può essere rappresentata come nella tabella che segue in cui sono evidenziati gli indici delle posizioni delle singole lettere:

L ' a l b e r o c u i t e n d e v i ...
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ...

  1. riga.length(); riporta 39.
  2. riga.substring(6, 10).length(); riporta 4.
  3. riga.substring(6, 10).toUpperCase(); riporta la stringa RO C.
  4. riga.replace('b', 'p').substring(4, 12); riporta la stringa pero cui.
  5. String nuova = riga.substring(4, 17).replace('e', 'E'); inizializza la stringa nuova con la stringa bEro cui tEnd.
  6. la variabile nuova è stata inizializzata a bEro cui tEnd
  7. la variabile riga è rimasta immutata

Le prime 4 istruzioni riportano un valore e NON alterano il valore iniziale della variabile riga, che non viene MAI modificata dalle chiamate dei vari metodi. È solo l'ultima istruzione che assegna alla variabile nuova un valore computato tramite riga, che comunque rimane immutata. Per modificare la variabile riga si sarebbe dovuto effettuare un assegnamento esplicito. Ad esempio: riga = riga.toUpperCase();.

Si veda il programma Test11.java.

Esercizio 10

Risposte
  1. x = ++a * b-- + 1
      5 1   3  2  4
    
  2. x += parola.length()*2 + 5*b
      6        1      2 3  5  4
    
  3. x = parola.toUpperCase().length() * 2
      6       1           2 3      4  5
    
  4. autoBlu.rifornire(Math.abs(rand.nextInt()) % 60)
            1        2    3    4   5       6   7
    

Esercizio 13

  1. Non esiste un problema di incompatibilità tra tipi perché viene effettuata una trasformazione di tipo
  2. Si tratta di una conversione automatica, che avviene durante l'assegnamento del valore al parametro

Esercizio 14

  1. Con inizializzazione int a = 4, b = 8; dopo aver eseguito il blocco:
    a = a++ + --b;
    b += a - b;
    

    si ottiene:
    11
    11
    
  2. Con la stessa inizializzazione int a = 4, b = 8; dopo aver eseguito:
    a = ++a + b--;
    b += a - b--;
    

    si ottiene:
    13
    13
    

Si veda il programma Test14.java.

Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14


M.A. Alberti, 5 novembre 2003