Modalità d'esame
L'esame consiste di una prova scritta, di un progetto e di una prova orale.
Nella prova scritta, della durata di due ore, viene richiesta la risoluzione di alcuni esercizi, basati su domande a risposta aperta, e di un problema in cui viene chiesto di applicare una delle tecniche algoritmiche presentate nell'insegnamento.
Il progetto mira ad approfondire gli aspetti pratici di uno o più argomenti trattati nell'insegnamento. Viene richiesto di progettare e realizzare un programma, secondo specifiche assegnate, e di descrivere e giustificare le scelte progettuali fatte, in una relazione scritta seguita da un'eventuale discussione orale, che sarà obbligatoria nel caso in cui la relazione presentasse aspetti incompleti o poco chiari. Le specifiche del progetto, che deve essere svolto individualmente, vengono fornite al termine delle lezioni di laboratorio. Il progetto deve essere consegnato durante entro le date che saranno comunicate attraverso il sito web dell'insegnamento e, al più tardi, entro il 15 settembre 2024.
L'esame si conclude con la prova orale, alla quale si accede dopo il superamento della prova scritta e del progetto. La prova verte sulla discussione di alcuni argomenti trattati nell'insegnamento.
Nella valutazione delle prove si terrà conto dei seguenti parametri: grado di conoscenza degli argomenti, capacità di applicare le conoscenze, capacità di ragionamento critico, chiarezza espositiva e proprietà di linguaggio. Oltre ai parametri precedenti, la valutazione del progetto terrà conto anche della capacità di applicare le conoscenze alla risoluzione di problemi concreti mediante lo sviluppo di programmi.
Al termine della prova orale viene formulata la valutazione complessiva, espressa in trentesimi, tenendo conto in modo paritetico delle valutazioni delle singole parti.
Risultati di apprendimento attesi
Il progetto ha l'obiettivo di verificare se lo studente:
- conosce le strutture dati fondamentali (liste, alberi, grafi, code, pile, ecc) e le principali tecniche algoritmiche (ricorsione, divide-et-impera, strategie greedy, programmazione dinamica);
- sa scrivere, comprendere e modificare programmi in Go che implementano e manipolano strutture dati fondamentali;
- sa usare le strutture dati fondamentali per descrivere e modellare problemi realistici;
- sa progettare e implementare in Go algoritmi che risolvono problemi realistici, applicando e adattando tecniche e algoritmi noti.