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.
- Lezione n. 9 - lunedì 6 ottobre 2025
-
- Array: array monodimensionali (vettori) e multidimensionali (matrici), dichiarazione di array, allocazione in memoria di un array; esempi.
- Stringhe di caratteri: rappresentazione di stringhe di caratteri come array, il carattere nullo “\0” di terminazione di una stringa, le funzioni printf e scanf con le stringhe; esempi.
- Lezione n. 10 - martedì 7 ottobre 2025
-
- Stringhe di caratteri: esempi ed esercizi sulle stringhe di caratteri, cenni sulle funzioni della libreria string.h.
- Numeri pseudo-casuali: generazione di sequenze di numeri pseudo-casuali, le funzioni srand e rand, la funzione time, esempi per la generazione di numeri interi pseudo-casuali nell'intervallo (a, b), esempi (scarica il documento: “Appunti sul linguaggio C”
).
- Esercitazione in laboratorio - giovedì 9 ottobre 2025
-
- Introduzione all'uso del laboratorio informatico: struttura del laboratorio e della sua rete, accesso alle postazioni di lavoro, accesso al server mediante il protocollo SSH, accesso al server mediante connessioni Internet dall'esterno (scarica il documento: “Accesso alle risorse del laboratorio informatico del Dipartimento di Matematica”
e le slide sull'uso del laboratorio informatico
; si suggerisce di prendere visione anche del documento “UNIX: introduzione elementare”
per una migliore comprensione dell'uso della shell del sistema operativo UNIX/Linux).
- Programmazione in C: scrittura di un programma in linguaggio C, compilazione, debugging ed esecuzione (documento con i testi e le soluzioni di alcuni esercizi che non abbiamo avuto il tempo di svolgere durante la lezione: esercitazione01.pdf
).
- Introduzione all'uso del laboratorio informatico: struttura del laboratorio e della sua rete, accesso alle postazioni di lavoro, accesso al server mediante il protocollo SSH, accesso al server mediante connessioni Internet dall'esterno (scarica il documento: “Accesso alle risorse del laboratorio informatico del Dipartimento di Matematica”
- Lezione n. 11 - venerdì 10 ottobre 2025
-
- Definizione di funzioni: definizione di funzioni in un programma C, nome della funzione, valore restituito dalla funzione, parametri, variabili locali, esempi.
- Passaggio dei parametri alle funzioni: passaggio di parametri per valore e per indirizzo ad una funzione, gli operatori “&” e “*”, esempi.
- Passaggio di array a funzioni: passaggio di un array (dell'indirizzo di memoria del primo elemento dell'array) ad una funzione; le funzioni per l'acquisizione in input e la stampa di un vettore; aritmetica sui puntatori; esempi con la notazione vettoriale e con l'uso esplicito di puntatori.
- Lezione n. 12 - martedì 14 ottobre 2025
-
- Crivello di Eratostene: calcolo dei numeri primi minori di n con il Crivello di Eratostene, strategia risolutiva, pseudo-codice e diagramma di flusso dell'algoritmo.
- Funzioni ricorsive: definizione di funzioni ricorsive, differenze ed analogie con procedure iterative, esempi (funzione fattoriale definita in modalità iterativa e ricorsiva).
- Esercitazione n. 2 - giovedì 16 ottobre 2025
-
- Esercizi sugli array: operazioni sugli array: intersezione, differenza, inversione (documento con i testi e le soluzioni degli esercizi: esercitazione02.pdf
).
- Esercizi sugli array: operazioni sugli array: intersezione, differenza, inversione (documento con i testi e le soluzioni degli esercizi: esercitazione02.pdf
- Lezione n. 13 - venerdì 17 ottobre 2025
-
- Problema dell'ordinamento (sort): definizione del problema dell'ordinamento di un insieme di dati, esempi.
- Algoritmo Selection Sort: strategia risolutiva del problema di ordinamento adottata dall'algoritmo di ordinamento per selezione, pseudo-codifica dell'algoritmo Selection Sort, diagramma di flusso, codifica in linguaggio C, esempi.
- Complessità computazionale di un algoritmo: problema, istanza di un problema, “dimensione” dell'istanza di un problema; complessità computazionale di un algoritmo come funzione che esprime una stima del numero di operazioni eseguite dall'algoritmo in funzione della dimensione dell'istanza del problema.
- Complessità computazionale di un algoritmo: la notazione “O grande”, esempi di classi di complessità.