Fondamenti di Informatica, Ingegneria Gestionale, A.A. 2002-2003
Appello del 14 Aprile 2003 - Compito B
Durata: 1 ora e 45 minuti


Parte I
  1. Scrivere un metodo statico verificaQuadrati che, data una LinkedList (o una Lista) di Integer, restituisce true se ogni elemento contiene il valore i2 dove i è la posizione dell'elemento nella struttura, e false altrimenti. Ad esempio, sulla lista (0, 1, 4, 9, 16) il metodo restituisce true.
  2. Scrivere un metodo statico sommaValoriFoglie che, dato un albero binario i cui nodi contengono oggetti Integer, restituisce la somma dei valori contenuti nelle foglie.

Parte II
Domanda 1

Dire cosa stampa il seguente programma, motivando le risposte (N.B. risposte non motivate saranno considerate nulle).
Suggerimento: si tengano presenti le differenze tra variabili locali, parametri formali e variabili di istanza (anche dette componenti).

class Mistero {
    public int x;
    public Mistero(int y){
        this.x = y;
    }
}
public class ProvaMistero {
    public static void mistero(int a, Mistero b){
        a = a + 10;
        b.x = b.x + 10;
    }
    public static void main(String[] args){
        int x = 40;
        Mistero m = new Mistero(40);
        mistero(x,m);
        System.out.println(x);
        System.out.println(m.x);
    }
}

Domanda 2

Dire quanti scambi di valori sono effettuati dall'algoritmo per selezione (SelectionSort) per ordinare il seguente array di interi:

7
1
9
3
6

Motivare la risposta (N.B. Risposte non motivate saranno considerate nulle).

Domanda 3

Cosa succede quando si invoca un metodo ricorsivo? Come si progettano i metodi ricorsivi?