l modulo Programmazione II del corso Fondamenti di Programmazione si concentra sulla formazione di studenti competenti nella programmazione avanzata in ANSI C, capaci di progettare, valutare ed implementare algoritmi e strutture dati appropriate alla risoluzione dei problemi, nonché di comunicare utilizzando il gergo del settore. Il modulo include, quindi, cenni alla teoria della complessità e applicazione diretta ad algoritmi su strutture dati lineari. Inoltre, sono presentati problemi e soluzioni su strutture non lineari.
Conoscenza e capacità di comprensione (knowledge and understanding)
Gli studenti acquisiranno una solida conoscenza e comprensione delle strutture dati lineari e gerarchiche fondamentali, tra cui liste, code e alberi binari di ricerca, insieme alla complessità computazionale delle operazioni su di esse ed agli algoritmi di ricerca e ordinamento. Saranno in grado di dimostrare una comprensione approfondita dei concetti legati alle strutture dati dinamiche, inclusi i puntatori e la loro gestione.
Capacità di applicare conoscenza e comprensione (applying knowledge and understanding)
Gli studenti saranno in grado di applicare le conoscenze acquisite nella progettazione e nell'implementazione di soluzioni pratiche, usando il linguaggio ANSI C, utilizzando efficacemente le strutture dati, gli algoritmi trattati nel corso e gli strumenti a disposizione. Saranno, infine, in grado di risolvere problemi complessi utilizzando queste conoscenze.
Capacità di apprendimento (learning skills)
Questo insegnamento mira a dotare gli studenti della capacità di sfruttare in modo efficace le risorse disponibili, tra cui le funzioni della libreria standard ANSI C e gli ambienti di sviluppo integrati con particolare enfasi agli strumenti di ricerca degli errori quali il debugger. Gli studenti impareranno a comprendere e gestire le risorse di memoria (sia di massa che centrale) in modo appropriato, in particolare durante l'utilizzo delle strutture dati dinamiche.Gli studenti svilupperanno competenze nell'analisi critica delle prestazioni degli algoritmi e nella valutazione della complessità computazionale. Saranno in grado di valutare e confrontare soluzioni basate su algoritmi e strutture dati in base a criteri di tempo e spazio.
Abilità comunicative (communication skills)
Gli studenti svilupperanno abilità di comunicazione attraverso la descrizione chiara e accurata, usando gli strumenti formali più adatti, delle loro soluzioni software e la capacità di comunicare efficacemente concetti legati alle strutture dati e agli algoritmi con i loro colleghi e con il docente. Saranno in grado di presentare le loro idee e soluzioni in modo chiaro e persuasivo.
Il corso prevede come metodo di insegnamento principale le lezioni frontali per acquisire le conoscenze teoriche di base e tutti gli elementi sintattici e lo svolgimento di esercitazioni, da svolgere anche in modo autonomo, proposte dal docente per acquisire la capacità di risolvere i problemi, applicare la conoscenza e utilizzare gli ambienti e le metodologie di sviluppo.
Il docente propone, inoltre, delle esercitazioni individuali che consistono nella soluzione di un problema che lo studente deve affrontare in autonomia che vengono successivamente corrette o discusse in classe.
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.
La frequenza non è obbligatoria, seppure fortemente consigliata, per sostenere con successo la prova di esame.
Lo studente è tenuto a frequentare almeno il 70% delle lezioni del corso per poter sostenere la prova in itinere del modulo.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza i requisiti per la partecipazione alle prove in itinere potranno essere modificati.
Cenni di Complessità Computazionale
Efficienza dei programmi.
Valutazione dell’efficienza di un algoritmo.
Le notazioni O e Ω per valutare la complessità di un programma
Algoritmi di Ricerca e Ordinamento
Algoritmi di ricerca
Algoritmi di ordinamento: selection sort, insertion sort, bubble sort, quick sort e merge sort
Tipi di Dato Astratto (TDA) e loro implementazione in C
Introduzione ai Tipi di Dato Astratto (TDA)
Tipi di dato astratto lineari e gerarchici
Risoluzione di problemi tramite TDA
Traduzione dei Tipi di Dato Astratto in Tipi di Dati Concreti (TDC), tramite l’utilizzo del linguaggio ANSI C
Scrittura di applicativi in ANSI C che sfruttino i TDA e le loro implementazioni
Strutture dati lineari
Liste e liste ordinate
Definizione della ADT
Rappresentazione sequenziale, collegata e doppiamente collegata
Implementazione con allocazione statica e dinamica
Code
Definizione della ADT
Rappresentazione sequenziale, collegata
Implementazione con allocazione statica e dinamica
Pile
Definizione della ADT
Rappresentazione sequenziale, collegata
Implementazione con allocazione statica e dinamica
Strutture dati non lineari
Alberi
Concetti generali e definizioni
Definizione della ADT
Alberi binari e binari di ricerca
Concetti generali e definizioni
Definizione della ADT
Implementazione delle operazioni principali
Dizionari (Tabelle Hash)
Concetti generali e definizioni
Definizione della ADT
Implementazione delle operazioni principali
Grafi
Concetti generali e definizioni
Definizione della ADT
[BeGu] Bellini, Guidi. Linguaggio C. Guida alla programmazione. McGraw-Hill
[Pel] Pellegrino Principe. C guida alla programmazione. Apogeo
Argomenti | Riferimenti testi | |
---|---|---|
1 | Cenni di Complessità Computazionale | dispense |
2 | Algoritmi di Ricerca e Ordinamento | dispense |
3 | Tipi di Dato Astratto (TDA) e loro implementazione in C | dispense |
4 | Liste e liste ordinate | Disense |
5 | code | Dispense |
6 | Pile | Dispense |
7 | Alberi | Dispense |
8 | Alberi binari e binari di ricerca | Dispense |
9 | Dizionari | Dispense |
10 | Grafi | Dispense |
Prova in itinere
Il modulo prevede una prova in itinere, che consiste:
Nello sviluppo di una applicazione al calcolatore della durata, di norma, da 60 a 90 minuti
In una prova orale, il cui accesso è subordinato al superamento della prova al calcolatore.
La partecipazione alla prova in itinere è subordinata:
Al superamento del primo modulo
Alla frequenza di almeno il 70% delle lezioni del modulo
La prova in itinere si svolgerà al termine del modulo.
Prova finale del modulo 2
La prova finale del modulo consiste:
Nello sviluppo di una applicazione al calcolatore della durata, di norma, da 60 a 90 minuti
In una prova orale, il cui accesso è subordinato al superamento della prova al calcolatore
Prova dell’insegnamento
Consiste nel superamento delle prove finali del modulo 1 e del modulo 2
Le prove di entrambi i moduli potranno essere svolte nello stesso appello