Le lezioni
Diario delle lezioni dell'anno accademico 2026/2027
L'attività didattica del corso IN110 Algoritmi e Strutture Dati per l'anno accademico 2026/2027 inizierà lunedì 21 settembre 2026; la prima lezione del corso si terrà in aula M1 dalle ore 14:00 alle ore 16:00.
Le lezioni del corso IN110 Algoritmi e Strutture Dati si tengono nel primo semestre (settembre 2026 - gennaio 2027) con il seguente orario:
- lunedì ore 14:00-16:00 (tutorato: aula M1);
- martedì ore 9:00-11:00 (lezione: aula M1, prof. Marco Liverani);
- giovedì ore 14:00-17:00 (esercitazione: laboratorio, prof. Alessandro Ravoni);
- venerdì ore 9:00-11:00 (lezione: aula M1, prof. Marco Liverani).
Nella prime settimana del corso si terranno lezioni a cura del prof. Marco Liverani in aula M1 anche negli orari del tutorato e delle esercitazioni. Sarà comunicato successivamente l'avvio effettivo delle attività di tutorato e delle esercitazioni.
Di seguito si riporta una sintesi degli argomenti trattati nel corso delle lezioni in aula e delle esercitazioni di laboratorio.
- Lezione n. 1 - lunedì 21 settembre 2026
-
- Presentazione del corso: argomenti che tratteremo, orario delle lezioni, orario delle esercitazioni, orario di ricevimento, modalità di esame (scarica il documento: “Presentazione del corso di Algoritmi e Strutture Dati”
). - Introduzione alla progettazione di algoritmi: un approccio intuitivo mediante alcuni esempi elementari.
- Presentazione del corso: argomenti che tratteremo, orario delle lezioni, orario delle esercitazioni, orario di ricevimento, modalità di esame (scarica il documento: “Presentazione del corso di Algoritmi e Strutture Dati”
- Lezione n. 2 - martedì 22 settembre 2026
-
- Esecutore e algoritmi: problema e istanza di un problema, caratteristiche dell'esecutore, compiti del progettista degli algoritmi, capacità del calcolatore/esecutore; algoritmi; esempi di pseudo-codifica di algoritmi per la soluzione di problemi elementari (primi k multipli di n, sommatoria dei primi n naturali, fattoriale di un numero naturale, verifica dell'ordinamento crescente di una sequenza di numeri). Linguaggi imperativi, istruzioni fondamentali di in linguaggio imperativo.
- Lezione n. 3 - giovedì 24 settembre 2026
-
- Algoritmi, diagrammi di flusso, programmazione strutturata: linguaggi imperativi, istruzioni fondamentali di un linguaggio imperativo, rappresentazione di algoritmi mediante diagrammi di flusso, strutture algoritmiche di tipo sequenziale, iterativa, condizionale; regole della programmazione strutturata, cenni sul Teorema Fondamentale della Programmazione Strutturata di Giuseppe Jacopini e Corrado Böhm; esempi: ricerca del massimo fra 2, 3 e n numeri, verifica dell'ordinamento di una sequenza, verifica della divisibilità di un numero naturale per un altro, calcolo del quoziente e del resto nella divisione di due numeri naturali (scarica il documento: “Algoritmi e diagrammi di flusso”
).
- Algoritmi, diagrammi di flusso, programmazione strutturata: linguaggi imperativi, istruzioni fondamentali di un linguaggio imperativo, rappresentazione di algoritmi mediante diagrammi di flusso, strutture algoritmiche di tipo sequenziale, iterativa, condizionale; regole della programmazione strutturata, cenni sul Teorema Fondamentale della Programmazione Strutturata di Giuseppe Jacopini e Corrado Böhm; esempi: ricerca del massimo fra 2, 3 e n numeri, verifica dell'ordinamento di una sequenza, verifica della divisibilità di un numero naturale per un altro, calcolo del quoziente e del resto nella divisione di due numeri naturali (scarica il documento: “Algoritmi e diagrammi di flusso”
- Lezione n. 4 - venerdì 25 settembre 2026
-
- Algoritmi, diagrammi di flusso, programmazione strutturata: esercizi per la pseudo-codifica di un algoritmo e la rappresentazione di un diagramma di flusso per la risoluzione dei seguenti problemi: verifica della primalità di un numero naturale, minimo comune multiplo tra due numeri naturali; un algoritmo sbagliato per il calcolo della radice quadrata di un numero naturale.
- Cenni sulla calcolabilità: alcuni problemi non risolubili per via algoritmica: esempi basati sulla congettura di Goldbach e la congettura di Collatz / Ulam.
- Lezione n. 5 - martedì 29 settembre 2026
-
- La Macchina di Turing: definizione della MdT come modello di calcolo astratto; esempio di MdT per il calcolo del successore di un numero naturale espresso in base 2; funzioni, macchine di Turing, algoritmi, calcolabilità delle funzioni elementari, composizione di funzioni e ricorsione come operazioni che preservano la calcolabilità; codifica di una macchina di Turing e del suo input come numeri naturali.
- Calcolabilità e modelli di calcolo: problemi calcolabili e non calcolabili, alcuni esempi; modelli di calcolo astratti: la macchina di Turing.
- Calcolabilità e modelli di calcolo: il modello di Von Neumann; cenni sul problema della fermata, cenni sulla Tesi di Church-Turing (scarica il documento: “Appunti sui modelli di calcolo”
).
- Lezione n. 6 - venerdì 2 ottobre 2026
-
- Linguaggi di programmazione: classificazion dei linguaggi in base al paradigma di programmazione, alcuni esempi. Linguaggi di programmazione di basso livello e di alto livello, linguaggio macchina; processo di traduzione del codice da linguaggio di programmazione di alto livello (codice sorgente) a linguaggio macchina (codice binario eseguibile), esecuzione del programma (scarica il documento: “Appunti sui linguaggi di programmazione”
). - Rappresentazione delle informazioni: codifica decimale e binaria di numeri interi positivi; struttura della memoria, bit, byte; rappresentazione di numeri interi “grandi”, mediante parole ottenute concatenando più byte. Rappresentazione di numeri interi relativi, rappresentazione di numeri razionali (floating point), rappresentazione di caratteri alfanumerici (scarica il documento: “Appunti sulla rappresentazione delle informazioni in memoria”
).
- Linguaggi di programmazione: classificazion dei linguaggi in base al paradigma di programmazione, alcuni esempi. Linguaggi di programmazione di basso livello e di alto livello, linguaggio macchina; processo di traduzione del codice da linguaggio di programmazione di alto livello (codice sorgente) a linguaggio macchina (codice binario eseguibile), esecuzione del programma (scarica il documento: “Appunti sui linguaggi di programmazione”