Corso di Laurea in Informatica

Programmazione

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

I Compitino - 5 novembre 2003

Home | II Compitino

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

Esercizio 1

Data la classe Automobile:
public class Automobile {
  private double serbatoio;
  public Automobile() {
    serbatoio = 0;
  }
  public Automobile(double serbatoioIniziale) {
    serbatoio = serbatoioIniziale;
  }
  public void rifornire(double quanto) {
    this.serbatoio += quanto;
  }
  public void consumare(double quanto) {
    double livello = serbatoio - quanto;
    serbatoio = livello;
  }
  public double livello() {
    return serbatoio;
  }
}
  1. Istanziare un oggetto della classe Automobile di nome autoRossa con un serbatoio iniziale di 60.5 litri (l’unità di misura è irrilevante) e un oggetto autoBlu senza carburante.
  2. Rifornire l'oggetto autoBlu con 30 litri di carburante
  3. Simulare il fatto che l’oggetto autoRossa abbia consumato 40.3 litri di carburante
  4. Calcolare il valore del livello del carburante come computato dai metodi seguenti:
    autoRossa.livello()
    autoBlu.livello()
    
  5. Dire se sono corrette le seguenti istruzioni:
    autoBlu.rifornire(autoRossa.livello());
    autoRossa.rifornire(autoBlu.livello());
    
  6. Calcolare nuovamente il valore che viene riportato dai metodi:
    autoRossa.livello()
    autoBlu.livello()
    
  7. Analizzare il metodo seguente con segnatura non_si_sa (Automobile, double)
    public void non_si_sa (Automobile that, double quanto) {
      this.serbatoio = that.serbatoio - quanto;
      that.serbatoio = this.serbatoio + quanto;
    }
    
  8. Eseguire ora AutoRossa.non_si_sa(autoBlu, 10); quindi ricalcolare il livello del carburante:
    autoRossa.livello()
    autoBlu.livello()
    
Risposte

Esercizio 2

Aggiungere alla classe Automobile un nuovo metodo per trasferire carburante da una macchina all'altra, con il seguente prototipo:
	public void trasferisci (Automobile da, double ammontare) 
Eseguire quindi autoRossa.trasferisci(autoBlu, 10.5) e ricalcolare i nuovi livelli di carburante:
autoRossa.livello()
autoBlu.livello()

Soluzione

Esercizio 3

La classe Automobile sopra definita modella una macchina rappresentandone il solo serbatoio mediante il livello del combustibile.
  1. Se volessimo anche rappresentare il colore e il tipo della macchina mediante due stringhe di caratteri cosa dovremmo modificare nella definizione iniziale della classe? E nel costruttore? Le modifiche da introdurre dovranno, ad esempio, rendere lecita l’istanziazione seguente:
    AutomobileBis mia_macchina = new AutomobileBis(50, “stilo”, autoRossa.colore);
    
  2. Quale parte della nuova dichiarazione della classe rende lecita o meno l’espressione autoRossa.colore ?
  3. E come sarebbe stata la stessa dichiarazione nel caso in cui per accedere al dato avessimo avuto bisogno di un metodo String getColore(), tramite l’espressione autoRossa.getColore()?
  4. Dare una definizione del metodo getColore() in questo caso.

Risposte

Esercizio 4

Supponete di aver introdotto nella classe Automobile dell’esercizio 1 il membro statico numeroAuto, di aver modificato i costruttori come segue e di aver definito un nuovo metodo statico getNumero():
public class Automobile { 
	…
	private static int numeroAuto = 0;
	public Automobile() {
		numeroAuto++;
		serbatoio = 0;
}
public Automobile(double serbatoioIniziale) {
		numeroAuto++;
		serbatoio = serbatoioIniziale;
	}
	…
	public static int getNumero() {
		return numeroAuto;
	}
}
Valutare le istruzioni seguenti, dimenticando quelle precedentemente eseguite e calcolare l’output:
System.out.println (Automobile.getNumero());
Automobile autoRossa = new Automobile();
System.out.println (autoRossa.getNumero());
Automobile autoBlu = new Automobile ();
System.out.println (autoRossa.getNumero());
System.out.println (Automobile.getNumero());

Risposte

Esercizio 5

Assumendo la dichiarazione:
Random rand = new Random();
Indicare il range dei valori delle seguenti dichiarazioni:
rand.nextInt() % 6;
(int) (Math.random() * 6); 
Inoltre scrivete un'istruzione per produrre valori pseudo-casuali nell'intervallo:
  1. [-7, 7], usando l'oggetto rand
  2. [4, 14], usando il metodo random() della classe Math.

Risposte

Esercizio 6

Data la classe Rettangolo, così definita
public class Rettangolo {
  private int x, y, amp, alt;
  Rettangolo(int x, int y, int amp, int alt) {
    this.x = x;
    this.y = y;
    this.amp = amp;
    this.alt = alt;
}
definite un nuovo costruttore che istanzia un rettangolo con ampiezza e altezza di un rettangolo dato e con il vertice sinistro nel punto dato, secondo la firma seguente:
Rettangolo(int x, int y, Rettangolo unRettangolo)

Soluzione

Esercizio 7

Dite qual'è la caratteristica di Java che consente di definire il nuovo costruttore Rettangolo in rapporto al costruttore dato inizialmente

Risposta

Esercizio 8

  1. Esprimere in linguaggio Java la condizione: il numero n deve essere minore di 10 ma non di 1.
  2. Esprimere in linguaggio Java la negazione della condizione precedente senza introdurre l’operatore di negazione.

Risposte

Esercizio 9

Scrivete in notazione matematica la seguente espressione Java:
formula = 4 * Math.PI * Math.pow(r, 3)/3 + Math.sqrt(1 + Math.pow(r, 2));

Risposta

Esercizio 10

Scrivete un espressione Java che rappresenti l'espressione matematica del moto in un campo di gravità, dove s0, v0 e g sono costanti:
s = s0 + v0t + ˝ gt2
Risposta

Esercizio 11

Data la seguente stringa:
String riga = new String("L'albero cui tendevi la pargoletta mano");
calcolare l'effetto delle istruzioni seguenti:
riga.length();
riga.substring(6, 10).length();
riga.substring(6, 10).toUpperCase();
riga.replace('b', 'p').substring(4, 12);

String nuova = riga.substring(4, 17).replace('e', 'E');
System.out.println (nuova);
System.out.println (riga);
Risposte

Esercizio 12

Assumendo le dichiarazioni:
int x, a = 1, b = 1;
String parola = new String ("Ei fu siccome immobile");
Automobile autoBlu = new Automobile();
Random rand = new Random ();
Indicare l’ordine di valutazione degli operatori nelle seguenti espressioni, mettendo il numero corrispondente sotto al simbolo dell’operatore:
x = ++a * b-- + 1
x += parola.length()*2 + 5*b 
x = parola.toUpperCase().length() * 2
x = autoBlu.rifornire(Math.abs(rand.nextInt()) % 60)
Risposte

Esercizio 13

  1. Dire se nell’ultima espressione dell’esercizio 12 sussiste un problema di compatibilità tra tipi, vista la firma del metodo rifornire (double) e visto che il metodo netxInt() riporta un valore intero.
  2. Dire se viene effettuato un casting, una conversione automatica o una promozione

Risposte

Esercizio 14

Date le variabili:
int a = 4, b = 8;
calcolare il valore di a e b, dopo aver eseguito separatamente i blocchi di istruzioni:
a = a++ + --b;
b += a - b;
a = ++a + b--;
b += a - b--;

Risposte

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


M.A. Alberti, 5 novembre 2003