Corso di Laurea in Informatica

Programmazione

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

Compitino III - 28 gennaio 2004

II Compitino | Home | I Appello

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

Esercizio 1

Data la classe Alta e la sua sottoclasse Bassa:
public class Alta {
   public int metodo_1(int i) {   }   
   public void metodo_2(int i) {   }   
   public static void metodo_3(int i) {   }   
   public static void metodo_4(int i) {   }
}

class Bassa extends Alta {   
   public  int metodo_1(int i) {   }   
   public void metodo_2(float i) {   }   
   public void metodo_3(int i) {   }   
   public static void metodo_4(int i, int j) {   }
}

Per ciascun metodo della sottoclasse Bassa dire se la definizione causa errore in compilazione e nel caso, specificare quale, o dire se si tratta di sovrascrittura o di sovraccaricamento.

Risposte

Esercizio 2

Date le classi Base, SubBase e Test:
class Base {   
   int n;   
   public Base () {   }   
   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. Scrivere la modifica per evitare l'eventuale errore.

Risposta

Esercizio 3

Analizzate la sequenza di numeri interi: 1, 3, 5, 7, 9, 11, ... generati dalla funzione f(n) rispettivamente per n = 0, 1, 2, 3, … .
Definite una funzione ricorsiva f(n) che li genera.

Risposta

Esercizio 4

Disegnate lo stack che viene generato per risolvere, come nell’esempio discusso in classe, l’espressione seguente in notazione postfissa: 14 1 5 4 - + / 2 1 + + 2 *. Vanno indicati lo stato dello stack e il token correntemente letto, cioč la fotografia dello stato della pila dopo aver letto il prossimo token:
null null null null null
null null null null null
null null null null
null null null null
null null null null

Risposta

Esercizio 5

Dato il seguente spezzone di codice:
public class Studente {
   private String nome;
   private Data iscrizione;
   private Data nascita;
   public String laurea;  
   private Integer esami;
   public Integer esami_sostenuti () {
         ....
   }
}
       
public class Dottorando extends Studente {
   public String dottorato;
   public Studente [] tutoraggio;
       ...
}
Dire se le seguenti istruzioni sono lecite o no:
  1. Dottorando d = new Studente();
  2. Dottorando d = new Dottorando(); Integer e = d.esami_sostenuti();
  3. Studente s; s.laurea = "informatica";
  4. Studente s = new Dottorando ); s.dottorato = "informatica";
  5. Dottorando d = new Dottorando(); d.tutoraggio[3] = new Studente();

Risposta

Esercizio 6

Data la seguente dichiarazione di tipo e inizializzazione:
String[] unArray = new String[5];
  1. Scrivere l'output generato dal ciclo seguente:
    for (int i = 0; i < unArray.length; i++)  {
    	unArray[i].concat("_" + i);
    	System.out.println(unArray[i]);
    }
    
  2. Nel caso ci fosse un errore, dire che tipo di eccezione solleva.

Risposta

Esercizio 7

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 void push(Object o) {
      NodoStack t = new NodoStack();
      t.dato = o;
      t.pros = cima;
      cima = t;
   }
}

scrivere il metodo Object pop() che elimina l'oggetto in cima alla pila.

Risposta

Esercizio 8

Definire l'eccezione PilaVuotaException che possa essere usata nel metodo pop() dell'esercizio precedente per evitare un errore.

Soluzione

Esercizio 9

Data la definizione della classe Coda, che realizza una struttura dati per gestire una coda:
public class Coda {
   private Nodo primo, ultimo;
   private static class Nodo {
      Object dato;
      Nodo pros;
   }
   public Coda() {
      primo = ultimo = null;
   }
}

scrivere il metodo aggiungi(Object o) che appende un nuovo oggetto alla fine della coda.

Soluzione

Esercizio 10

Implementare i metodi hasNext()e next() dell'interfaccia Iterator nel package java.util per la struttura dati contenente i mesi dell'anno in ordine (si noti che l'implementazione del metodo public void remove () è richiesta dall'interfaccia Iterator ma non da questo esercizio) e il metodo proprio della classe int mese(), che riporta il valore numerico del mese corrente:
public class IteratorDemo implements java.util.Iterator {
   private String[] anno = 
      {"ge", "fe", "mr", "ap", "mg", "gi", "lu", "ag", "se", "ot", "no", "di"};
   private int indice = 0;
   public void remove () {}
   public int mese() {} // riporta il valore numerico del mese corrente
   public boolean hasNext() {}
   public Object next(){}
}

Soluzione

Esercizio 11

Disegnate l'andamento dello stack delle chiamate di metodi durante la computazione del seguente metodo ricorsivo, descritto in linguaggio pseudo-naturale.
Il metodo riceve in input il parametro lista_data = [ a b c ];.
La funzione lista tranne_primo(l) riceve una lista come parametro e riporta all'ambiente chiamante la stessa lista tranne il primo elemento.
int funzione (lista) {
   se lista è vuota
      riporta 0
   else riporta 1 + funzione (tranne_primo(lista))
}

Risposta

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


M.A. Alberti, 28 gennaio 2004