Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programmazione II e Laboratorio
Corso B Scritto del 4 aprile 2007
si realizzi, in versione iterativa o ricorsiva a scelta, un metodo con rma: void cancellaPari(); per la classe MiaListaConcatenata che cancelli tutti gli elementi della lista in posizione pari (il primo elemento della lista ` e in posizione dispari).
realizzare un metodo di rma: int contaFoglieNodiInterni(); per la classe GenericTreeArrayList che conta il numero di nodi interni presenti nellalbero. Ad esempio, lalbero riportato qui di seguito ha 6 nodi interni.
(a) Sia data la sequenza di istruzioni A a = new A(); A b = new B();, dire quale ` e la stampa eettuata a console dellesecuzione delle istruzioni: (a-1) a.metodoUno(); (a-2) b.metodoUno(); (a-3) a.metodoDue(); (a-4) b.metodoDue(); (b) Sia data la sequenza di istruzioni B b = new A(); b.metodoDue();, ` e possibile compilarla? Nel caso sia possibile, quale ` e la stampa eettuata a console dallesecuzione di tale istruzione? Nel caso non sia possibile, spiegarne il motivo. (c) Sia Ist(A) e Ist(B ) linsieme di tutti gli oggetti di tipo A e tipo B di un programma in un ` vero che linsieme Ist(B ) ` certo istante di tempo. E e incluso in Ist(A)?
Supponendo che sia istruzione-1 che istruzione-2 possono sollevare una eccezione di tipo Eccezione, si risponda alle seguenti domande: (a) Se istruzione-1 solleva una eccezione, dire se listruzione di stampa viene eseguita. Nel caso di risposta aermativa dire quale ` e il valore stampato. (b) Se istruzione-2 solleva una eccezione, dire se listruzione di stampa viene eseguita. Nel caso di risposta aermativa dire quale ` e il valore stampato. (c) Se istruzione-1 e istruzione-2 non sollevano alcuna eccezione, dire se listruzione di stampa viene eseguita. Nel caso di risposta aermativa dire quale ` e il valore stampato. Punti totali: 27/27.
Nome: Corso: B
public class MiaListaConcatenata { private class ListElem { private int dato; private ListElem next = null; public ListElem getNext() { return next; } public void setNext(ListElem next) { this.next = next; } [ ... ] public void cancellaPariR() { if (next == null) return; next = next.getNext(); if (next != null) next.cancellaPariR(); } } private ListElem first; public MiaListaConcatenata() { first = null; } [ ... ] public void cancellaPari() { if (first == null) return; ListElem iterator = first; while ((iterator != null) && (iterator.getNext() != null)) { iterator.setNext((iterator.getNext()).getNext()); iterator = iterator.getNext();
2.
public class GenericTreeArrayList { private GenericNode root; public class GenericNode { private int dato; private ArrayList<GenericNode> children = new ArrayList<GenericNode>(); [ ... ] public int contaNodiInterni() { if (children.size() == 0) return 0; int nodiInterni = 0; for (GenericNode child: children) nodiInterni += child.contaFoglieNodiInterni(); return nodiInterni + 1; } } public GenericTreeArrayList() { root = null; } [ ... ] Coppia contaFoglieNodiInterni() { if (root == null) return 0; else return root.contaNodiInterni(); }
3.
(a-1) a.metodoUno(); MetodoUno della classe A MetodoDue della classe A (a-2) b.metodoUno(); MetodoUno della classe A MetodoDue della classe B (a-3) a.metodoDue(); MetodoDue della classe A (a-4) b.metodoDue(); MetodoDue della classe B (b) Non ` e possibile compilarla. Non ` e possibile assegnare ad una variabile di una sottoclasse un oggetto di una sopraclasse. (c) Vero. 4.
(a) Viene eseguita, il valore stampato ` e: 5. (b) Viene eseguita, il valore stampato ` e: 6. (c) Viene eseguita, il valore stampato ` e: 6.