Il corso di Programmazione 2 ha lo scopo di fornire gli strumenti per la risoluzione di semplici problemi connessi all'uso di alcune strutture dati elementari attraverso l'utilizzo della programmazione ad oggetti. In particolare il corso parte dall'introduzione del concetto di modello di dati astratto per poi introdurre ed approfondire diversi modelli dei dati quali: pile, code, liste e alberi e grafi. Verranno inoltre studiati i principali algoritmi di gestione delle strutture dati. In particolare i principali algoritmi di ordinamento come quicksort e mergesort.
Il linguaggio C++ verrà usato come strumento principale per presentare le implementazioni delle strutture dati e degli algoritmi.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi.
L'insegnamento sarà svolto attraverso delle lezioni frontali (per un totale di 24 ore) in cui verranno presentati i contenuti del corso, anche attraverso delle dimostrazioni pratiche di programmazione in aula. Lo studente avrà a disposizione ulteriori ore di lezione frontale da svolgere con un tutor didattico, durante le quali avrà la possibilità di perfezionare la propria preparazione o colmare eventuali lacune. Inoltre lo studente avrà a disposizione una piattaforma di apprendimento attraverso la quale sarà possibile esercitarsi durante le ore di studio e autovalutarsi sui contenuti appresi a lezione. La medesima piattaforma fornisce un valido strumento per la preparazione all'esame.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Il Programma didattico è diviso nelle seguenti parti:
Parte 1 Introduttiva: Programmazione Imperativa in C++.
Parte 2: Programmazione Avanzata ad Oggetti
Parte 3: Complessità e Ordinamento.
Cenni sulla complessità: notazioni asintotiche. Complessità di un problema computazionale, limite asintotici, alcuni semplici casi di esempio sul calcolo del limite asintotico.
Algoritmi di ordinamento (ripasso): Algoritmi BubbleSort, SelectionSort, InsertionSort.
Algoritmi di ordinamento che sfruttano il concetto di ricorsione:
Parte 4: Strutture Dati Elementari e Implementazione in C++
Fondamenti di Programmazione in C++
Algoritmi, strutture dati e oggetti. Autore: Luis Joyanes Aguilar. Casa Editrice: McGraw-Hill
Questo volume introduce ai principi della programmazione scegliendo come linguaggio didattico proprio il C++, nonostante non lo si possa certamente definire tale. Il motivo che ci spinge in questa direzione è il desiderio di ridurre i tempi di formazione del programmatore, facendolo applicare, fin dai primi algoritmi, su un linguaggio professionale realmente utilizzato in grandi suite software.
Altro materiale sarà caricato su Studium.
Libri consigliati:
Effective C++ e More Effective C++. Autore: Scott Meyers. Casa Editrice: Addison-Wesley
Il testo è consigliato agli studenti che intendono approfondire il tema della programmazione C++ avanzata. Ogni capitolo del libro è costituito da più "temi" presentati sotto forma di brevi trattazioni indipendenti che forniscono consigli specifici, spiegazioni sulle sottigliezze del C++ ed esempi di codice esaurienti. La descrizione articolata di ogni tema rende chiaro cosa fare, cosa non fare e perché.
| Argomenti | Riferimenti testi | |
|---|---|---|
| 1 | Introduzione alla Programmazione in C++ | Capitoli 1-9 del T.D.R. |
| 2 | Classi e oggetti | Capitolo 12 del T.D.R. |
| 3 | Classi derivate, ereditarietà e polimorfismo | Capitolo 13 del T.D.R. |
| 4 | Sovraccaricamento degli operatori | Capitolo 20 del T.D.R. |
| 5 | Template | Capitolo 14 del T.D.R. |
| 6 | Cenni alla Complessità Computazione | Material del docente |
| 7 | Ordinamento e ricerca | Capitolo 11 del T.D.R. |
| 8 | Liste | Capitolo 16 del T.D.R. |
| 9 | Pile e code | Capitolo 17 del T.D.R. |
| 10 | Alberi | Capitolo 19 del T.D.R. |
| 11 | Grafi | Materiale del docente |
L'esame consiste in una prova di laboratorio che prevede l'implementazione in C++ di alcune tre le strutture dati previste dal corso e/o la risoluzione di alcuni problemi computazionali di livello intermedio. La prova di laboratorio sarà affrontata solo se lo studente supererà la prova scritta. Gli studenti idonei alla prova di laboratorio potranno affrontare la prova orale. Il mancato superamento di una qualunque delle prove rende necessaria la ripetizione dell'intero esame. Non è possibile affrontare le prove in appelli diversi. Il voto finale sarà dato dalla medie delle tre prove, in trentesimi. I risultati saranno visibili nella sezione "Avvisi" della pagina web del dipartimento.
Al termine della prova ad ogni studente sarà attribuito un voto secondo il seguente schema:
- Non approvato: lo studente non ha acquisito i concetti di base e non è in grado di rispondere ad almeno il 60% delle domande né di svolgere gli esercizi.
- 18-23: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di collegamento dei contenuti sono modeste, riesce a risolvere semplici esercizi.
- 24-27: lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di collegamento dei contenuti sono buone, risolve gli esercizi con pochi errori.
- 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di padroneggiarli compiutamente e di collegarli con spirito critico; risolve gli esercizi in modo completo e senza errori.
Per partecipare all'esame finale è necessario avere effettuato la prenotazione sul portale SmartEdu. Per eventuali problemi tecnici relativi alla prenotazione occorre rivolgersi alla Segreteria didattica. Gli studenti che non avranno effettuato la prenotazione non potranno sostenere la prova.
Verranno adottate tutte le misure previste dal regolamento per gli studenti con necessità speciali.