Corso di Laurea in Informatica

Programmazione

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

Prova scritta I appello - 6 febbraio 2004

I Compitino | II Compitino | III Compitino | Home

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

Esercizio 1

Data la classe Verde e la sua sottoclasse VerdeMare:
public class Verde {
   protected String colore;
   protected static int numero;
   private int gradazione;

   Verde(int gr) {
      colore = “verde”;
      numero++;
      gradazione = gr;
   } 
   protected int metodo_1() {
      return gradazione++;
   }
   protected String metodo_2() {
      return colore;
   }
   public static int metodo_3() {
      return numero;
   }
}

class VerdeMare extends Verde {
   private int gradazione;
   VerdeMare(int gr){
   ...
   }
}

Implementare il costruttore VerdeMare(int gr). Il parametro gr è da considerarsi un parametro numerico, compreso tra 1 e 5 ad esempio. Inoltre eseguire e valutare le seguenti istruzioni contenute nel metodo main della classe Verde, segnalando errori se pensate che ce ne siano:

Verde matita = new Verde(3);
matita.metodo_2();
matita.metodo_1();
matita.metodo_3();
matita.gradazione;
VerdeMare penna = new VerdeMare(2);
penna.metodo_2();
penna.metodo_1();
penna.metodo_3();
VerdeMare stilo = new VerdeMare(1);
stilo.metodo_3();
penna.metodo_3();
((Verde)stilo).gradazione;

Risposte

Esercizio 2

Date le classi Base, SubBase e Test:
class Base {   
   int n;      
   public Base (int i) {
      n = i;   
   }
}

class SubBase extends Base {
}
public class Test {
   public void metodo() {
      Base b = new Base(5);
      SubBase sb = new SubBase(10);
   }
   public static void main (String[] a) {
      Test t = new Test();
      t.metodo();
   }
}

  1. La classe Test viene compilata correttamente?
  2. Indicare in caso contrario la riga che causa l'errore.
  3. Modificare le classi Base e SubBase per evitare l'eventuale errore.

Risposta

Esercizio 3

Analizzate la sequenza di numeri interi: 1, 3, 7, 15, 31, 63, ... generati dalla funzione f(n) rispettivamente per n = 0, 1, 2, 3, … .
Definite una funzione ricorsiva int f(n) che generi i valori della sequenza.

Risposta

Esercizio 4

Disegnate lo stack che viene generato durante l’esecuzione di un metodo che controlla che le parentesi di una espressione siano bilanciate correttamente. Ogni token letto uguale alla parentesi aperta verrà impilato sullo stack, ad ogni parentesi chiusa, invece, verrà effettuato una eliminazione dalla cima dello stack. Alla fine della procedura se lo stack è vuoto vuol dire che le parentesi sono bilanciate. Nella tabella segnate lo stato della pila dopo aver letto il token corrente.

Valutate l’espressione: ( a ) ( ( ( b ) ( ( c ) ) ( d ) ) )

Quindi valutate l'espressione: ( ( a ) ( ( b ) )

Risposta

Esercizio 5

Utilizzando la classe StringTokenizer del pacchetto java.util scrivete un ciclo while per testare se ci sono ancora token e stamparli. Inizializzate l’oggetto st di classe StringTokenizer con la stringa data “questo è un esame”.

Dire inoltre qual’è il tipo riportato da nextToken():

Risposta

Esercizio 6

Scrivere in notazione infissa la seguente espressione aritmetica, data in notazione postfissa:
1 5 + 2 * 3 1 + /
risultato:

Scrivere in notazione infissa la seguente espressione aritmetica, data in notazione prefissa:

/ + 8 4 * 2 + 1 1
risultato:

Risposta

Esercizio 7

Rispondere alle seguenti domande, con V (vero) o F (falso) o una breve risposta.
  1. Una classe può implementare una e una sola interfaccia.
  2. Si usa un’interfaccia per dichiarare metodi che le classi dovranno implementare.
  3. Si usa un’interfaccia per dichiarare una classe che modella un comportamento e definisce dei metodi, ma che ne rimanda alle sottoclassi la loro implementazione.
  4. Un’interfaccia può essere usata come tipo di dato nel dichiarare variabili.
  5. Una classe dichiarata abstract non può essere istanziata.
  6. Una classe dichiarata abstract non può essere estesa.
  7. Una classe dichiarata abstract può essere istanziata solo se dichiarata in un'altra classe.
  8. array_identifier = new type [length]; Costituisce una dichiarazione, la creazione di un oggetto, una inizializzazione, una creazione e inizializzazione congiunta o una dichiarazione e inizializzazione congiunta.
  9. Il metodo di una classe figlio che sovrascrivere il metodo della classe padre deve lanciare le stesse eccezioni.
  10. Il tipo di rientro di metodi sovraccaricati deve essere lo stesso per tutti i metodi.
  11. L’ordine e il tipo degli argomenti in un metodo di una classe figlio devono essere diversi da quelli del metodo sovrascritto della classe padre.

Soluzione

Esercizio 8

Data una stringa di caratteri partenza dire l’effetto causato dall’esecuzione dei cicli while e do-while sulla stringa arrivo.
String partenza = "i seguaci";
StringBuffer arrivo = new StringBuffer();
int i = 0;
char c = partenza.charAt(i);
while (c != 'i') {
	arrivo.append(c);
	c = partenza.charAt(++i);
}
e
do {
	copia.append(c);
	c = originale.charAt(++i);
} while (c != 'i');
  1. la stringa arrivo alla fine del ciclo:
  2. la stringa arrivo alla fine del ciclo:

Ripetere l’esercizio per la stringa String partenza = "imbuto".

  1. la stringa arrivo alla fine del ciclo:
  2. la stringa arrivo alla fine del ciclo:

Soluzione

Esercizio 9

Data la definizione della classe Stack, che realizza una struttura dati per gestire una pila:
public class Stack {
   private NodoStack cima;
   private static class NodoStack { 
   Object dato;
      NodoStack pros; 
   }
   public Stack() {
      cima = null; 
   }
   public Object pop() {
      if (cima == null)
         throw new PilaVuotaException();
      else {
         Object risultato = cima.dato;
         cima = cima.pros;
      return risultato;
   }
   public void push(Object o) {
      ...
   }
}

scrivere il metodo void push(Object o) che inserisce un nuovo oggetto sulla pila.

Disegnate inoltre la struttura s e lo stato della memoria (stack e heap), evidenziando i vari legami dopo le seguenti istruzioni:
Stack s = new Stack(); 
s.push(Integer(2)); 
s.pop(); 
s.push(Integer(5));
s.push(Integer(7));
Soluzione

Esercizio 10

Implementare l'interfaccia Enumeration del package java.util per la classe EnumarationDemo seguente:
public class EnumarationDemoimplements java.util.Enumeration {
   private String[] cesto = 
      {"mela", "pera", "banana", "kiwi", "arancia"};
   private int indice = 0;
   public boolean hasMoreElements() { 
      ... 
   }
   public Object nextOblect(){ 
      ... 
   }
}

Soluzione

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


M.A. Alberti, 6 febbario 2004