Sei sulla pagina 1di 1

Canale 2

Compito di Fondamenti di Informatica


27 giugno 2015

1. [3 punti] Con riferimento allarchitettura di un computer, per sommare due numeri memorizzati
in due diverse locazioni della memoria centrale, quale sequenza di eventi deve essere eseguita e quali
componenti della CPU devono essere coinvolte?

2. [3 punti] Introdurre la struttura dati denominata albero binario. Illustrare le due tecniche studiate
per limplementazione di tale struttura, mediante array e mediante nodi e puntatori. Discutere i
vantaggi e gli svantaggi relativi alle tecniche presentate.

3. [3 punti] Con riferimento al linguaggio Java, descrivere in dettaglio le classi involucro ed il mecca-
nismo di auto-impacchettamento, spiegando il loro impiego e fornendo alcuni semplici esempi.

4. [6 punti] Implementare un metodo public static int[] filter(int[] unArray){...} che resti-
tuisce un array formato da tutti e soli i numeri dispari presenti in unArray, mantenendo il loro ordine
relativo. Ad esempio, assegnato larray [4, 13, 18, 7, 5, 8] il metodo dovr`a restituire larray [13,
7, 5]. Suggerimento: Utilizzare un metodo ausiliario per determinare la lunghezza del nuovo array
che dovr`a essere restituito come risultato.

5. [18 punti] Un distretto sanitario desidera gestire elettronicamente i propri medici di base ed i relativi
pazienti. Assumere la classe Medico avente le variabili distanza nome (String) e maxPazienti (int),
e la classe Paziente, avente le variabili distanza codice (String) e medico (riferimento a Medico).
Assumere per tali classi gli usuali metodi di costruzione, accesso e modifica senza sviluppare il codice
relativo. La classe DistrettoSanitario `e cos` definita:

public class DistrettoSanitario {


private ArrayList<Medico> medici;
private ArrayList<Paziente> pazienti;
public DistrettoSanitario(){...};
public boolean aggiungiMedico(String unNomeMedico, int unMaxPazienti){...};
public int contaPazienti(String unNomeMedico){...};
public boolean aggiungiPaziente(String unCodicePaziente, String unNomeMedico){...};
public void rimuoviPaziente(String unCodicePaziente){...};
public void rimuoviMedico(String unNomeMedico){...};
public ArrayList<Medico> mediciDisponibili(){...};
public void scambiaPazienti(String nomeMedico1, String nomeMedico2){...};
};

Ciascun oggetto Paziente deve sempre avere un riferimento al proprio medico curante, e ciascun
medico deve avere un numero di pazienti non superiore al proprio massimo. Non duplicare mai i
medici e i pazienti inseriti nel sistema.
Il metodo aggiungiMedico inserisce nel sistema un nuovo medico, restituendo lesito delloperazione.
Il metodo contaPazienti restituisce il numero di pazienti in cura presso il medico specificato. Il
metodo aggiungiPaziente inserisce nel sistema un nuovo paziente solo se il medico indicato esiste e
non `e al completo, restituendo lesito delloperazione. Il metodo rimuoviPaziente rimuove dal sistema
il paziente indicato. Il metodo rimuoviMedico rimuove dal sistema il medico indicato assieme a tutti
i suoi pazienti. Il metodo mediciDisponibili restituisce una lista con tutti i medici non ancora al
completo. Il metodo scambiaPazienti scambia due pazienti, scelti arbitrariamente, tra i due medici
indicati.