Anno accademico 2023-2024

INFORMATICA

Docenti

Fabio Alessi
Anno di corso
1
Totale crediti
12
Periodo didattico
Annualità Singola
Tipologia
Base
Prerequisiti. Non occorrono prerequisiti differenti dalle usuali conoscenze matematiche di base fornite dalla Scuola Superiore. In particolare, il corso può essere seguito da coloro che non hanno alcuna esperienza di programmazione.
Metodi didattici. Il corso è prevalentemente basato su lezioni frontali, che vengono svolte con l’ausilio di lavagna e slides. Esse sono affiancate da ATTIVITÀ DI LABORATORIO, dove si testano i programmi proposti/dati come esercizio in ambiente di programmazione C. I codici proposti vengono discussi e valutati. Sono possibili approfondimenti da parte degli studenti concordati con il docente. Se necessario, il corso può essere tenuto in lingua inglese.
Modalità di verifica. L’esame finale consiste in una prova comprensiva di domande di teoria, esercizi e stesura di programmi, più un eventuale orale nei casi in cui si renda necessario per determinare il voto.

L’esame finale è preceduto da due prove scritte parziali che hanno lo scopo di verificare la preparazione media della classe e di fungere da stimolo allo studio degli argomenti.

Obiettivi formativi
Il corso si propone di formare lo studente gli aspetti che vanno dalla rappresentazione di un problema computazionale, alla soluzione astratta, e infine l’implementazione nel linguaggio oggetto di studio nel corso (il linguaggio di programmazione C).

Ci si aspetta che alla fine del corso lo studente abbia raggiunto gli obbiettivi delineati sotto:

Conoscenza e comprensione:

conoscere le basi della programmazione C;

conoscere alcuni algoritmi fondamentali;

acquisire competenza nella progettazione di un programma (moderatamente) complesso;

riconoscere le strutture da utilizzare per la modellizzazione di classi di problemi;

Capacità di applicare conoscenza e comprensione:

saper modellare situazioni concrete, dandone una adeguata rappresentazione astratta;

saper sviluppare algoritmi per risolvere problemi ed essere in grado di valutarne la complessità computazionale;

Autonomia di giudizio:

essere in grado di formalizzare un problema, analizzarlo, decidere quali strumenti siano più idoeni per affrontarlo, assumendo un atteggiamento critico sempre aperto a possibili miglioramenti;

Abilità comunicative:

Sapere descrivere/commentare efficacemente il lavoro e/o il codice proposto, e relazionarsi in modo costruttivo con altri soggetti competenti, nel contesto di gruppi di lavoro.

Capacità di apprendimento:

Essere in grado di estendere le competenze astratte acquisite ad altri linguaggi di programmazione.

Contenuti
– Preliminari matematici: elementi di matematica combinatoria, algebra e statistica. Principio di induzione. Approccio ricorsivo alla soluzione di problemi.

– Introduzione agli algoritmi ed elementi di teoria della complessità computazionale. Big O notation.

-Introduzione al linguaggio C. I tipi fondamentali: (long) int, char, float, double. Rappresentazione dei numeri e aritmetica dei computer.

– Variabili e array. Programmazione strutturata. Test e If/While/For statements. Paradigma iterativo e paradigma ricorsivo. Cicli annidati.

– Funzioni. Chiamata per valore e per riferimento.

– Algoritmi di ordinamento (Insertion-Sort, Bubble-Sort, Quick-Sort, Merge-Sort).

– Numeri casuali, metodi di Montecarlo e qualche applicazione in analisi e fisica.

– Operazioni bitwise.

– Strutture.

– Puntatori.

– Tecniche di programmazione rivolte all’efficienza: memoization e programmazione dinamica.

– Elaborazione dei file.

– Formattazione di input/output.

– Strutture dati astratti: code, pile, liste e alberi. Applicazioni.

– Grafi e principali algoritmi di esplorazione: DFS, BFS, Minimum Spanning Tree. Applicazioni.

Testi di riferimento
– “Il linguaggio C. Fondamenti e Tecniche di Programmazione”. Autori: Deitel & Deitel. Edizioni Pearson

[oppure le precedenti edizioni: “C Corso Completo di Programmazione”, Autori: Deitel & Deitel. Edizioni APOGEO Education].

– Per approfondimenti: “Introduzione agli Algoritmi e strutture dati”. Autori: Cormen, Leiserson, Rivest, Stein. Edizioni Mc Graw Hill.

– Appunti delle lezioni e materiale didattico inserito nella pagina web istituzionale del docente.