Le lezioni
Diario delle lezioni dell'anno accademico 2025/2026
Le lezioni del corso IN110 Algoritmi e Strutture Dati si tengono nel primo semestre (settembre 2025 - gennaio 2026) 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).
Nelle prime tre settimane 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ì 22 settembre 2025
-
- 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 Informatica 1”
).
- 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 Informatica 1”
- Lezione n. 2 - martedì 23 settembre 2025
-
- 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ì 25 settembre 2025
-
- 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: media aritmetica di un insieme di n numeri, ricerca del massimo fra 2, 3 e n numeri, verifica dell'ordinamento di una sequenza, verifica della divisibilità di un numero naturale (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: media aritmetica di un insieme di n numeri, ricerca del massimo fra 2, 3 e n numeri, verifica dell'ordinamento di una sequenza, verifica della divisibilità di un numero naturale (scarica il documento: “Algoritmi e diagrammi di flusso”
- Lezione n. 4 - venerdì 26 settembre 2025
-
- 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: divisibilità di un numero naturale per un altro, calcolo del quoziente e del resto nella divisione di due numeri naturali, 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 - lunedì 29 settembre 2025
-
- 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.
- Lezione n. 6 - martedì 30 settembre 2025
-
- 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”
).
- 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.
- 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. 7 - giovedì 2 ottobre 2025
-
- Rappresentazione delle informazioni:, 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”
).
- Introduzione al linguaggio C: struttura e sintassi generale di un programma C, direttive del precompilatore per l'inclusione di librerie, la funzione main, dichiarazione di variabili, tipi di dato, la funzione printf, la funzione scanf.
- Struttura di controllo condizionale: la struttura di controllo condizionale if... else..., esempi.
- Operatori di confronto: operatori di confronto, espressioni logiche, connettori logici and, or, not, valutazione di espressioni booleane, esempi.
- Rappresentazione delle informazioni:, 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”
- Lezione n. 8 - venerdì 3 ottobre 2025
-
- Strutture di controllo iterative: le istruzioni while, do-while e for; esempi.
- Operatori aritmetici: operatori aritmetici, anche in forma compatta (++, -- in forma prefissa e postfissa; gli operatori di assegnazione +=, -=, *= e /=). L'operazione di cast. L'operatore modulo “%” per il calcolo del resto nella divisione tra interi.