Nuova ricerca

Luca BEDOGNI

Professore Associato
Dipartimento di Scienze Fisiche, Informatiche e Matematiche sede ex-Matematica

Insegnamento: Programmazione 2

Matematica (Offerta formativa 2021)

Obiettivi formativi

Lo scopo del corso di Programmazione II è far evolvere le conoscenze e le abilità di programmazione degli studenti a partire da quelle di base acquisite durante il corso di Programmazione I. In particolare si cureranno da un lato le abilità di analisi e sviluppo di strutture dati e algoritmi avanzati, dall'altro le capacità di sviluppo e testing di applicazioni reali. Si prenderà a riferimento il linguaggio C++.

Prerequisiti

Le conoscenze acquisite durante il corso di Programmazione I.

Programma del corso

Parte degli argomenti del corso vengono presentati in stretta interazione con il corso di Strutture Dati e Algoritmi. In particolare, gli argomenti affrontati sono
- l'implementazione delle strutture seguenti strutture dati: liste, pile, code , alberi, grafi;
- l'introduzione e l'implementazione delle relative primitive;
- l'uso delle primitive per lo sviluppo di applicazioni sulle strutture dati considerate,
- la progettazione e lo sviluppo di algoritmi sulle strutture dati considerate.

Inoltre saranno affrontate alcune tematiche fondamentali per la produzione del software:
- la progettazione di software complessi attraverso l'astrazione di processo
- la progettazione e realizzazione di moduli software (interfaccia e corpo)
- la specifica e l'uso di makefile
- principi di qualità del software, testing e debugging.

Metodi didattici

Le lezioni del corso si svolgono in laboratorio. La metodologia adottata è di tipo hands-on e prevede sessioni pratiche di programmazione per sperimentare i vari aspetti degli argomenti visti a lezione.

Testi di riferimento

- P. Foggia, M. Vento. «Algoritmi e strutture dati - Astrazione, progetto e realizzazione», McGraw-Hill, 2011

- S. Dasgupta, C.H. Papadimitriou, U.V. Vazirani. «Algorithms», McGraw-Hill, 2006

- B. Eckel, "Thinking in C++", 2nd Edition, Volume 1 http://www.mindviewinc.com/


- Slide del docente disponibili su dolly

Verifica dell'apprendimento

Durante l'anno si svolgono almeno 5 prove scritte e 4 di laboratorio. Il punteggio massimo assegnato ad ognuna delle due prove è 32. Per partecipare alla prova di laboratorio è necessario superare la prova scritta con una votazione di almeno 16/32 la prova scritta. Il voto finale è determinato come media pesata delle due prove: 35% voto dello scritto, 65% voto del laboratorio.

La prova scritta mira a verificare la capacità dello studente di scrivere funzioni e codificare algoritmi sulle strutture dati viste a lezione, di codificare funzioni ricorsive e di padroneggiare i principali aspetti dell'uso della memoria dinamica e della programmazione modulare e della compilazione.

La prova di laboratorio ha l'obiettivo di verificare la capacità dello studente di scrivere applicazioni per casi di studio reali attraverso la scrittura di moduli software che coinvolgono le strutture dati viste a lezione e lo sviluppo di makefile.

Maggiori informazioni sulla modalità d'esame sono disponibili nel documento delle FAQ scaricabile dal sito DOLLY del corso dove sono inoltre disponibili prove d'esame passate.

Risultati attesi

Conoscenza e capacità di comprensione: Tramite le lezioni, lo studente avrà solide conoscenze e capacità di comprensione di soluzioni implementative per le strutture dati liste, alberi e grafi, e i relativi algoritmi. Inoltre, lo studente sarà in grado di comprendere e realizzare makefile per la costruzione di progetti in C++ e la documentazione software.

Capacità di applicare conoscenza e comprensione: Tramite esercitazioni pratiche al computer e lo svolgimento di esercizi di laboratorio, lo studente sarò in grado di applicare le conoscenze acquisite durante il corso.

Autonomia di giudizio: Tramite lo svolgimento di attività di laboratorio, lo studente sarà in grado di valutare, esporre e discutere criticamente le scelte progettuali adottate per la realizzazione di applicazioni in C++ che riguardano gli aspetti avanzati di programmazione, le strutture dati e gli algoritmi visti a lezione.


Capacità di apprendimento: Le attività descritte consentiranno allo studente di acquisire gli strumenti metodologici per proseguire gli studi e per potere provvedere autonomamente al proprio aggiornamento, particolarmente cruciale in un ambito come quello informatico di gestione dell'informazione, dove le tecnologie sono in continua evoluzione.