Nuova ricerca

Maurizio VINCINI

Professore Associato
Dipartimento di Ingegneria "Enzo Ferrari"

Insegnamento: Strutture Dati e Algoritmi

Ingegneria Informatica (MO) (Offerta formativa 2023)

Obiettivi formativi

Introdurre i concetti di base della programmazione strutturata, gli aspetti metodologici della programmazione la correttezza e la complessità degli algoritmi.

Prerequisiti

Aver frequentato l'insegnamento di Fondamenti di Informatica I e Lab. e possedere una buona conoscenza del linguaggio C.

Programma del corso

Il corso mira a far acquisire agli studenti i concetti, gli algoritmi e le metodologie della programmazione strutturata nel linguaggio C.
Record di attivazione (1 CFU)
Record di attivazione delle funzioni, memoria stack, regole di visibilità e durata delle variabili e delle funzioni, variabili globali e statiche. Allocazione dinamica della memoria.
Organizzazione modulare dei programmi.

Ricorsione (3 CFU)
Algoritmi ricorsivi, funzioni ricorsive.
Algoritmi di Backtracking.
Tipi di dato strutturati.
Complessità
Complessità degli algoritmi, comportamento asintotico, valutazione della complessità dei programmi.
Algoritmi Greedy.
Algoritmi di ricerca e ordinamento.

Tipi di dato astratto. (2 CFU)
Liste, pile, code heap. Alberi binari: inserimento, ricerca, cancellazione.

Esercitazioni (3 CFU)
Il corso prevede esercitazioni in aula ed in laboratorio su tutte le tematiche svolte a lezione. Inoltre, verranno approfonditi gli argomenti riguardanti il progetto e realizzazione di programmi strutturati in linguaggio C mediante esercitazioni assistite presso il laboratorio didattico.

Metodi didattici

La materia viene insegnata attraverso lezioni frontali che si avvalgono dell’uso di slide rese disponibili agli studenti mediante la piattaforma moodle e di lezioni pratiche in laboratorio. Le lezioni frontali hanno l’obiettivo di fornire una conoscenza “teorica” di base della materia. Per ogni argomento trattato vengono inoltre resi disponibili attraverso la piattaforma olj.ing.unimore.it diversi esempi di programmi da realizzare in laboratorio.

Testi di riferimento

LINGUAGGIO C 6/ED
8838699275 · 9788838699276
di Alessandro Bellini, Andrea Guidi
McGraw-Hill Education

Kerningam, Ritche "Il linguaggio C " seconda edizione. Pearson - Prentice Hall.T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, "Introduzione agli algoritmi e strutture dati 2/ed", McGraw-Hill, 2005, ISBN: 9788838662515.

Algoritmi in Linguaggio C: 80 esercizi di programmazione e soluzioni commentate – 30 aprile 2021
di Federico Bolelli, Maurizio Vincini - ISBN-13 : 979-8745789175
https://www.amazon.it/Algoritmi-Linguaggio-programmazione-soluzioni-commentate/dp/B093RV4XN3/ref=sr_1_1?dchild=1&qid=1621501744&refinements=p_27%3AMaurizio+Vincini&s=books&sr=1-1

Verifica dell'apprendimento

L'apprendimento viene verificato attraverso una prova a risposta multipla (1 ora con peso 3 CFU) propedeutica ad una seconda prova pratica al calcolatore (2 ore con peso 6 CFU). Nella prima prova lo studente deve dimostrare di aver acquisito le conoscenze rispetto ai contenuto del corso. Nella prova al calcolatore lo studente deve dimostrare la capacità di realizzare algoritmi in linguaggio C simili a quelli visti durante il corso.
Per la prima prova non è possibile consultare appunti, libri o altro materiale per la seconda prova è possibile consultare libri di teoria, ma non appunti o libri di esercizi, è inoltre consentito fare uso della reference del C, della documentazione e dell'implementazione delle funzioni primitive che verranno fornite all'esame.

Non sono previste prove intermedie.

Risultati attesi

1. Conoscenza e comprensione:
Le lezioni frontali forniranno allo studente la capacità di conoscere e comprendere i fondamenti dell'informatica e in particolare della programmazione imperativa e sequenziale.

2. Capacità di applicare conoscenza e comprensione
Tramite le lezioni teoriche e pratiche in laboratorio lo studente saprà definire algoritmi sequenziali e avrà la capacità di sviluppare e verificare programmi utilizzando il linguaggio di programmazione C.

3. Autonomia di giudizio
Lo studente sarà in grado di progettare e realizzare un'applicazione informatica complessa in linguaggio C.

4. Abilità comunicative
Lo studente saprà comunicare idee, problemi e soluzioni informatiche complesse.

5. Capacità di apprendimento
Lo studente disporrà di una conoscenza di base tale da permettergli approfondimenti successivi sui temi legati alla programmazione software ed all'analisi delle strutture dati complesse.