Sei sulla pagina 1di 7

Corso di Laurea in Informatica

Programmazione II e Laboratorio
Corso A e B Scritto del 4 luglio 2007

Esercizio 1 (punti 7) Si consideri la denizione della classe BinaryTree, riportata qui di seguito. Il metodo preorderR eettua una visita in pre-ordine di un albero binario.
public class BinaryTree { private BinaryNode root; public class BinaryNode { public int dato; public BinaryNode left = null; public BinaryNode right = null; [...] } public BinaryTree() { root = null; } [...] public void preorderR() { System.out.print("Lalbero e composto dai nodi (in preordine): "); preorderR(root); System.out.println(""); } public void preorderR(BinaryNode node) { if (node == null) return; System.out.print(node.getDato() + ", "); preorderR(node.getLeftChild()); preorderR(node.getRightChild()); } [...] }

Assumendo che lalbero binario mioAlbero sia:

si disegni lo stato dello stack e dello heap nei seguenti istanti per la chiamata mioAlbero.preorderR(): allinizio della prima esecuzione di preorderR(BinaryNode node); subito prima del termine dellesecuzione di preorderR(BinaryNode node), cio` e prima che il blocco corrispondente sia rimosso dallo stack, invocato con node, parametro formale, inizializzato alloggetto di tipo BinaryNode che contiene il valore 8. Esercizio 2 (punti 8) Sia data la classe che realizza una lista concatenata:
public class MiaLista { private class ListElem { public int dato; public ListElem next = null; public int getDato() { return dato; } public ListElem getNext() { return next; } [...] } private ListElem first; public MiaLista() { first = null; } [...] }

realizzare: un metodo ricorsivo: int contaMaggiori(int x); 2

per la classe MiaLista che conti gli elementi presenti nella lista il cui campo dato riporta un valore strettamente maggiore di x; un metodo ricorsivo: int contaMinori(int x); per la classe MiaLista che conti gli elementi presenti nella lista il cui campo dato riporta un valore strettamente minore di x. Esercizio 3 (punti 6) Si consideri il seguente frammento di codice:
public class Animale { public boolean vola() { return false; } public boolean haLePiume() { return false; } }

Si risponda alle seguenti domande: (a) Denire una classe Uccello come estensione della classe Animale ridenendo, se necessario, in maniera opportuna i metodi vola e haLePiume della classe Animale in modo che rispettino il fatto che gli uccelli volano e hanno le piume; (b) Denire una classe Mammifero come estensione della classe Animale ridenendo, se necessario, in maniera opportuna i metodi vola e haLePiume della classe Animale in modo che rispettino il fatto che i mammiferi non volano e non hanno le piume; (c) Denire una classe Gallina come estensione della classe Uccello ridenendo, se necessario, in maniera opportuna i metodi vola e haLePiume della classe Animale in modo che rispettino il fatto che le galline non valano ma hanno le piume; (d) Denire una classe Pipistrello come estensione della classe Mammifero ridenendo, se necessario, in maniera opportuna i metodi vola e haLePiume della classe Animale in modo che rispettino il fatto che i pipistrelli volano ma non hanno le piume. Esercizio 4 (punti 6) Sia data la seguente specica (interfaccia) per la struttura dati lista:
public interface Lista { public void insert(int val); public boolean delete(int val); public boolean isEmpty(); public boolean member(int val); public void insertFirst(int val); public void insertLast(int val); public void deleteFirst(); public void deleteLast(); public int getFirstDato(); public int getLastDato(); }

e sia ListaImpl una classe che realizzi (implements) linterfaccia sopra riportata. Si completi la realizzazione della classe CodaImpl: 3

public class CodaImpl { private Lista lista; public CodaImpl() { lista = new [ ???? ]; } public int leggiPrimoInCoda() { [ ???? ] } public void cancellaPrimoDallaCoda() { [ ???? ] } public void mettiInCoda(int val) { [ ???? ] } public boolean codaVuota() { [ ???? ] } }

Punti totali: 27/27.

Scritto di Programmazione II e Laboratorio del 04/07/2007 SOLUZIONI Cognome: Matricola:


1. TBA 2.

Nome: Corso: B

public class MiaLista { private class ListElem { public int dato; public ListElem next = null; public int getDato() { return dato; } public ListElem getNext() { return next; } public int contaMaggiori(int x) { int count = 0; if (dato > x) count = 1; if (next != null) count += next.contaMaggiori(x); return count; } [...] } private ListElem first; public MiaLista() { first = null; } public int contaMinori(int x) { int count = 0; if (first == null) return count; ListElem iterator = first; while (iterator != null) { if (iterator.getDato() < x)

count++; iterator = iterator.getNext(); } return count; } public int contaMaggiori(int x) { if (first == null) return 0; return first.contaMaggiori(x); } [...] }

3.

(a) public class Uccello extends Animale {


public boolean vola() { return true; } public boolean haLePiume() { return true; } }

(b) public class Mammifero extends Animale {


}

(c) public class Gallina extends Uccello {


public boolean vola() { return false; } }

(d) public class Pipistrello extends Mammifero {


public boolean vola() { return true; } }

4.

public class CodaImpl { private Lista lista; public CodaImpl() { lista = new ListaImpl(); } public int leggiPrimoInCoda() { return lista.getFirstDato(); } public void cancellaPrimoDallaCoda() { lista.deleteFirst(); } public void mettiInCoda(int val) {

lista.insertLast(val); } public boolean codaVuota() { return lista.isEmpty(); } }

Potrebbero piacerti anche