Corso di Laurea in Informatica

Programmazione

M. A. Alberti
Università degli Studi di Milano
A.A. 2005/06

Prova scritta - IV appello 12 luglio 2006

Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

Esercizio 1

Stabilire qual'è l'output del codice Java seguente, supponendo che sia stata dichiarata la variabile int i:

  1. for (i = 1; i < 10; i++) {   
       if (i%3 == 0) break;     
       System.out.println (i);
    }
    System.out.println (i);
    

  2. for (i = 1; i < 10; i++) {   
       if (i%3 == 0) continue;     
       System.out.println (i);
    }
    System.out.println (i);
    

  3. for (i = 1; i < 10; i++) {   
       if (i%3 == 0) System.exit(0);     
       System.out.println (i);
    }
    System.out.println (i);
    

Risposte

Esercizio 2

Supponete sia definita una classe BarcaVela derivata dalla classe Barca e supponete che quest'ultima classe abbia definito i metodi pubblici velocitàNodi() e accendiMotori().
  1. Un oggetto di classe BarcaVela risponde ai metodi velocitàNodi() e accendiMotori()?
  2. Questi metodi dovranno eseguire le stesse azioni sia per gli oggetti di classe BarcaVela sia per gli oggetti di classe Barca, sempre e comunque?
  3. Come si chiama in Java il concetto di specializzazione dei metodi?
  4. Se per la classe BarcaVela è stato definito il metodo alzareRanda(), questo può essere invocato su un oggetto di classe Barca?

Risposte

Esercizio 3

Data la classe Dipendente con i seguenti costruttori:
class Dipendente
{
   private String nome;
   Dipendente()
   {
      nome = new String();
   }
   Dipendente(String unNome) 
   {
      nome = unNome;
   }
}
  1. È possibile cambiare il valore del membro nome di un oggetto già creato?
  2. Come? (scrivere le istruzioni necessarie)
  3. Per estendere la classe con una specializzazione, introduciamo la sottoclasse Impiegato, completare quindi il codice seguente opportunamente:
    class Impiegato extends Dipendente 
    {
       private int settore; // 1, 2, 3 ad esempio
       Studente() 
       {
    	settore = 1; // valore di default
       }
       Studente(String unNome, int unSettore) 
       {
    	settore = unSettore;
       }
    }
    
Supponendo di aver eseguito l'istruzione:
	Impiegato imp = new Impiegato();
  1. È possibile accedere al campo nome della superclasse?
  2. È corretta l'espressione seguente per accedere al campo:
    	imp.nome
    
  3. Esistono altri modi?
  4. In generale, in una sottoclasse è possibile accedere direttamente ad un campo privato di un'istanza della superclasse?
  5. In una sottoclasse è possibile usare un metodo privato della superclasse?

Risposte

Esercizio 4

Srivere il metodo init che inizializza con numeri dispari un array di interi di dimensione MAX, passato come parametro. A scelta si usi un ciclo for oppure un ciclo while.
public int[] init(int[] a) {
   ...
}

Soluzione

Esercizio 5

Scrivere un metodo per rimuovere un elemento in posizione data da un array che verrà riportato all'ambiente chiamante modificato. Sia la posizione dell'elemento da rimuovere sia l'array sono passati come parametri. Per rimuovere l'elemento si deve procedere ad eseguire l'avanzamento di una posizione di tutti i valori dell'array dalla posizione data alla fine. Si supponga cha l'array sia un array di interi.
int[] rimuovi(int i, int[] a) {
   ...
}

Soluzione

Esercizio 6

Utilizzando la classe StringTokenizer del pacchetto java.util implementare un ciclo for necessario per inizializzare l'array di stringhe frase. Ad esempio: se in input è data la frase “questo è un esame” allora l'array frase dovrà essere inizializzato a [questo, è, un, esame].
   System.out.print("input una riga di testo: ");                  
   String riga = Keyboard.readString();
   StringTokenizer processore_di_riga = new                                   ;

   String [] frase = new                                          ;
   
   for

Soluzione

Esercizio 7

Scrivere il metodo int conta() che conta i numeri pari contenuti in un array membro d'istanza della classe Numeri, la cui lunghezza è stabilita dalla costante MAX e che viene inizializzato con numeri pseudo causuali compresi tra 1 e 10 (estremi inclusi).
public class Numeri {
   final int MAX = 20;
   private int [] array_numeri;
   ...
}

Soluzione

Esercizio 8

Dire se è corretto il seguente ciclo for, dove v è un oggetto di classe Vector
for (Enumeration e = v.elements(); e.hasMoreElements();) {
              System.out.println(e.nextElement());
}
  1. Specificare il perché
  2. Dire quale metodo viene implicitamente invocato quando si passa l'argomento e.nextElement()println.

Risposte

Esercizio 9

Implementare l'interfaccia Enumeration del package java.util per la classe EnumerationDemo seguente:
public class EnumerationDemo implements java.util.Enumeration {
   private String[] mazzo = 
     {"rosa", "dalia", "zinia", "margherita", "narciso"};
   private int indice = 0;
   public boolean hasMoreElements() { 
      ... 
   }
   public Object nextElement(){ 
      ... 
   }
}

Soluzione

Esercizio 10

Disegnate lo stato dello stack che viene utilizzato per valutare l'espressione aritmetica in notazione postfissa:
1 5 + 2 * 3 1 + /
          ^
quando si sia arrivati a scandire l'espressione fino al token 3.

Risposta

Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10


M.A. Alberti, 12 luglio 2006