Fondamenti di Informatica T1 Mappe Tutor Melissa Licciardello melissa.licciardell2@unibo.it Melissa Licciardello Fondamenti di Informatica T1 1 / 16
Mappe Matrice N x 2 : Gli elementi della prima colonna, denominati chiavi, identificano univocamente gli elementi della seconda colonna. Si può accedere ad un particolare elemento utilizzando la chiave associata Primitive: T2 put(t1 k, T2 v) Inserisce una coppia chiave-valore nella mappa T2 get(t1 k) Restituisce l elemento associato ad una determinata chiave passata come argomento T2 remove(t1 k) Rimuove l elemento associato ad una determinata chiave passata come argomento int size() Restituisce la cardinalità della mappa boolean isempty() Verifica se la mappa è vuota Set<T1> keyset() Restituisce il set delle chiavi Implementazione HashMap Melissa Licciardello Fondamenti di Informatica T1 2 / 16
Esercizio 1 (SVOLTO) Si vuole realizzare un programma di amministrazione per una scuola. Uno Studente è composto da un nome, un cognome ed una media. Oltre ad i metodi getter e setter deve ridefinire i metodi equals e hashcode (due studenti sono considerati uguali quando hanno lo stesso nome e lo stesso cognome). Una Classe è composta da un anno, una sezione ed un set di studenti. Un Insegnante è composto da nome e cognome. Ridefinire per questo, oltre ad i metodi getter e setter, i metodi equals e hashcode. Una Scuola ha un nome ed è composta da una mappa del tipo < Insegnate, Classe >. Oltre ad i metodi getter e setter definire i seguenti metodi public Set < Classe > getclassiperanno(int anno) : Ritorna in output un Set contenente tutte le classi di un determinato anno. public Insegnante getmigliore() : Ritorna l insegnante responsabile della classe con la media più alta. Scrivere poi un main di prova per testare le funzioni sopra elencate Melissa Licciardello Fondamenti di Informatica T1 3 / 16
Esercizio 1 : Soluzione Studente (PARTE I) Melissa Licciardello Fondamenti di Informatica T1 4 / 16
Esercizio 1 : Soluzione Studente (PARTE II) Melissa Licciardello Fondamenti di Informatica T1 5 / 16
Esercizio 1 : Soluzione Classe Melissa Licciardello Fondamenti di Informatica T1 6 / 16
Esercizio 1 : Insegnante Melissa Licciardello Fondamenti di Informatica T1 7 / 16
Esercizio 1 : Soluzione Scuola (PARTE I) Melissa Licciardello Fondamenti di Informatica T1 8 / 16
Esercizio 1 : Soluzione Scuola (PARTE II) Melissa Licciardello Fondamenti di Informatica T1 9 / 16
Esercizio 1 : Soluzione Main (PARTE I) Melissa Licciardello Fondamenti di Informatica T1 10 / 16
Esercizio 1 : Soluzione Main (PARTE II) Melissa Licciardello Fondamenti di Informatica T1 11 / 16
Esercizio 1 : Soluzione Main (PARTE III) Melissa Licciardello Fondamenti di Informatica T1 12 / 16
Esercizio 2 Un Libro è composto da un titolo ed un prezzo. Oltre ad i metodi getter e setter, ridefinire i metodi equals e hashcode. Una Libreria ha un nome ed una mappa < String, Set < Libro >> che ne schematizza l organizzazione di uno scaffale, dove la stringa utilizzata come chiave ne identifica il genere. Scrivere poi i seguenti metodi: public boolean aggiungilibro(libro libro, String genere): Aggiunge un libro allo scaffale adeguato. Se lo scaffale di quel preciso genere non esiste, il metodo ne crea uno ad hoc. Da in output true se l operazione va a buon fine, false altrimenti. public String getgenerepiueconomico() : Da in output il genere dello scaffale il cui prezzo dei libri, in media, è più basso. Scrivere poi un main di prova per testare le funzioni sopra elencate Melissa Licciardello Fondamenti di Informatica T1 13 / 16
Esercizio 3 Un Programma è composto da un titolo, un genere ed una fascia (un enum i cui valori sono VERDE, GIALLO, ROSSO). Ridefinire per questo i metodi hashcode e equals, oltre ad i getter e setter. Un Appuntamento è composto da un ora (un intero) ed un giorno della settimana (una stringa). Oltre ad i metodi getter e setter, ridefinire i metodi equals e hashcode. Inoltre la classe deve implementare l interfaccia Comparable (la funzione compareto deve seguire l ordine temporale). Un Canale è composto da un nome ed una mappa < Appuntamento, Programma > che ne indica la programmazione. Definire i seguenti metodi: public Set < Programma > programmiperbambini(string genere) : da in output il set di programmi visionabili da bambini (Fascia VERDE) per un determinato genere. public List < Appuntamento > programmazioneprogramma(string titolo) : da in output la lista (ordinata) degli appuntamenti di un determinato programma durante la settimana. Scrivere poi un main di prova per testare le funzioni sopra elencate Melissa Licciardello Fondamenti di Informatica T1 14 / 16
Esercizio finale (I) La classe astratta Film è composta da un titolo ed un anno. Inoltre deve mantenere un contatore del numero di voti ricevuti (inizializzato a zero) ed un codice univoco (la cui generazione dipende dall implementazione). Deve implementare Comparable in modo che un insieme di film possa essere ordinato in base ai voti ricevuti. Esibisce inoltre il metodo astratto public void vota(). Esistono due implementazioni: FilmAnimazione : Come ulteriore attributo ha un enum che ne indica la nazionalità (GIAPPONESE,AMERICANO,EUROPEO). Il codice (che deve essere generato nel costruttore) ha sintassi ANIM + prime tre lettere del titolo + prime due cifre dell anno. Il metodo vota(), ogni volta che viene invocato, aggiunge un voto al cumulatore dei voti del film. Inoltre, ogni dieci voti ricevuti, il film ne deve ricevere uno bonus. Cortometraggio: Come ulteriore attributo ha un enum che ne indica il genere (COMMEDIA,AZIONE,DRAMMATICO). Il codice (che deve essere generato nel costruttore) ha sintassi CORT + prime due cifre dell anno + prime tre lettere del titolo. Il metodo vota(), ogni volta che viene invocato, aggiunge un voto al cumulatore dei voti del film. Melissa Licciardello Fondamenti di Informatica T1 15 / 16
Esercizio finale (II) La classe Proiezione è composta da due interi che ne indicano l ora ed il numero della sala. Oltre ad i metodi getter e setter deve ridefinire i metodi hashcode() e equals(). La classe Festival è composta da un nome e da una mappa del tipo < Proiezione, Film > che ne indica la programmazione. Deve esibire i seguenti metodi : public Map < Proiezione, Cortometraggio > programmazionecorti(genere genere, int orario) : da in output la programmazione dei soli cortometraggi di un certo genere e dopo un certo orario. public List < Film > getclassifica() : da in output la classifica ordinata (e senza ripetizioni!) dei film. public FilmAnimazione migliorclassificatopernazionalità(nazionalità nazionalità) : da in output il film di animazione che ha ottenuto il maggior numero di voti per una certa nazionalità. public boolean vota (String nome film) : vota un film. Da true se l operazione riesce, false altrimenti. Scrivere poi un main di prova per testare le funzioni sopra elencate Melissa Licciardello Fondamenti di Informatica T1 16 / 16