Informatica, Primo canale (A-D), anno accademico 2019-20209 CFU |
Obiettivi | Programma | Materiale didattico |
Orario delle lezioni | Ricevimento studenti | Modalità d'esame |
Diario delle lezioni |
Vengono presentati alcuni algoritmi fondamentali per problemi di ordinamento, ricerca e selezione, alcuni problemi numerici, evidenziandone le caratteristiche di efficienza attraverso l'analisi di complessità asintotica.
Vengono descritti i principali metodi di codifica dell'informazione.
Alla fine del corso lo studente sarà in grado di:
Componenti di un sistema di elaborazione: hardware, software, principali unità periferiche. Interazione con un sistema operativo basato su finestre. Il sistema operativo: funzioni principali, gestione dei processi, gestione della memoria, file system. Concetto di cartella, documento, applicazione/programma.
Rappresentazione dell'informazione: codifica di informazioni numeriche - sistemi di numerazione posizionali, codifica binaria, ottale, esadecimale, conversioni di base. Rappresentazione di numeri interi negativi. Rappresentazione in virgola mobile. Codifica di caratteri.
Concetto di algoritmo. Esempi di algoritmi in linguaggio naturale. Generalità sui linguaggi di programmazione, compilatori.
Programmazione in linguaggio Python: uso dell'interprete interattivo, ambienti di programmazione, preparazione di script in linguaggio Python. Costrutti essenziali del linguaggio: variabili, espressioni. Assegnazioni, metodi di input/output, istruzioni di selezione, ed iterazione. Sequenze, slicing di sequenze. Definizione di funzioni, parametri. Accesso a file e scrittura su file. Consultazione della documentazione Python. Principi di programmazione orientata agli oggetti.
Algoritmi fondamentali: Ricerca sequenziale, ricerca dicotomica su un vettore ordinato. Ordinamento: selection sort, merge sort, quick sort, bubble sort. Algoritmo di Euclide per la ricerca del Massimo Comun Divisore (MCD). Algoritmo per la ricerca del k-esimo elemento. Algoritmi di base su matrici.
Introduzione alla complessità computazionale: concetto di complessità di un algoritmo, notazioni asintotiche. Equazioni di ricorrenza e metodi per la loro soluzione. Complessità computazionale degli algoritmi studiati.
La votazione deriva dalla media dei voti riportati nella prova di programmazione e nella prova scritta, integrata eventualmente dall'esito del colloquio. È necessario riportare la sufficienza sia nella prova di programmazione che nella prova scritta. Il colloquio è richiesto a discrezione del docente.
23 Settembre 2019 | |
---|---|
Argomenti |
|
Materiale | Compilare il questionario con informazioni generali sugli studenti |
torna all'elenco delle lezioni
25 Settembre 2019 (lab) | |
---|---|
Argomenti |
Cenni sulla struttura di un file system gerarchico: dischi logici, files, cartelle
Uso della shell Linux (o Terminale in Mac OS, o Prompt dei comandi in Windows) Navigazione nel file system: comando Uso dell'interprete Python 3 in modalità interattiva Operatori aritmetici, espressioni, variabili, assegnazioni Esempi di semplici problemi risolubili in modalità interattiva Funzione |
Esercizi proposti |
Verificare, utilizzando l'interprete Python 3, qual è il massimo valore Verificare, utilizzando l'interprete Python 3, qual è il massimo valore Sperimentare la differenza tra l'operatore Esprimere 8430 secondi in ore, minuti e secondi. Calcolare quanti secondi sono 3 ore, 5 minuti e 18 secondi Trovare la lunghezza dell'ipotenusa di un triangolo rettangolo i cui cateti misurano rispettivamente 18.6 metri e 15 metri |
torna all'elenco delle lezioni
25 Settembre 2019 | |
---|---|
Argomenti |
Precedenza tra operatori, valutazione di una espressione: albero sintattico Istruzione di assegnazione, binding nome - valore Regole per la definizine di identificatori, parole riservate La funzione Funzioni di conversione Stringhe, operatori su stringhe. Uso di funzioni matematiche con |
torna all'elenco delle lezioni
30 Settembre 2019 | |
---|---|
Argomenti |
Script vs. modalità interattiva Funzione Istruzione Espressioni boolean, le costanti Indentazione del codice Istruzione Istruzione Istruzioni |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
2 Ottobre 2019 (lab) | |
---|---|
Argomenti |
Invocazione di metodi e uso del valore restituito Generazione di numeri pseudocasuali con Semplici programmi con l'istruzione |
Esercizi proposti |
torna all'elenco delle lezioni
2 Ottobre 2019 | |
---|---|
Argomenti |
Espressioni Variabili Esempi di programmi con istruzioni condizionali Esempi di programmi con uso di contatori e flag |
torna all'elenco delle lezioni
7 Ottobre 2019 | |
---|---|
Argomenti |
Chiamata di funzioni. Significato in una espressione.
Funzioni vuote, funzioni che restituiscono valori. Parametri ed argomenti. Funzioni di conversione. La funzione Definizione di funzioni con |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
9 Ottobre 2019 (lab) | |
---|---|
Argomenti |
Esercizi sulla definizione di funzioni |
Esercizi proposti |
torna all'elenco delle lezioni
9 Ottobre 2019 | |
---|---|
Argomenti |
Stack di attivazione delle funzioni. Variabili locali.
Passaggio dei parametri. Assenza di effetti collaterali su parametri semplici. Passaggio dei parametri con nome, parametri opzionali Esempi di definizione di funzioni. |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
14 Ottobre 2019 | |
---|---|
Argomenti |
L'istruzione di ciclo Esercizi sull'uso di cicli e istruzioni condizionali |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
16 Ottobre 2019 (lab) | |
---|---|
Argomenti |
Esercizi sull'uso di cicli e istruzioni condizionali |
Esercizi proposti |
torna all'elenco delle lezioni
16 Ottobre 2018 | |
---|---|
Argomenti |
Istruzioni di assegnazione con modifica Uso di variabili boolean per il controllo di cicli Semplici programmi con cicli Istruzione Esempi di programmi con cicli e istruzioni di selezione |
Listati ed esercizi proposti |
Somme di quadratiScrivere un programma che, dato in input un numero naturale n, stampa tutte le coppie di naturali x, y tali che x^2 + y^2 = z^2, con x, y <= n e z naturale. Per n = 20 le soluzioni dovrebbero essere le seguenti: 3^2 + 4^2 = 5^2 5^2 + 12^2 = 13^2 6^2 + 8^2 = 10^2 8^2 + 15^2 = 17^2 9^2 + 12^2 = 15^2 12^2 + 16^2 = 20^2 Soluzione: cercaTernePitagoriche.py |
torna all'elenco delle lezioni
21 Ottobre 2019 | |
---|---|
Argomenti |
Algoritmo per approssimare uno zero di una funzione continua ricercaZero.py Esempi di programmi con cicli multipli e istruzioni di selezione Introduzione alle stringhe. Indicizzazione, slicing, funzione |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
23 Ottobre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su stringhe, cicli. Istruzione |
Listati ed esercizi proposti | Esercitazione 5 |
torna all'elenco delle lezioni
23 Ottobre 2019 | |
---|---|
Argomenti |
Eccezioni: l'istruzione Esercizi su cicli, istruzioni condizionali, stringhe Commento della funzione di ricerca binaria ricercaZero.py |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
28 Ottobre 2019 | |
---|---|
Argomenti |
Liste Accesso e modifica di elementi di una lista. Slicing di liste Cicli su liste. Istruzione I metodi
Liste disomogenee. La funzione |
Listati ed esercizi proposti |
Esercizi di base su liste:
Data in input una sequenza di interi che rappresentano frequenze:
|
torna all'elenco delle lezioni
30 Ottobre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su liste. |
Listati ed esercizi proposti | Esercitazione 6 |
torna all'elenco delle lezioni
30 Ottobre 2019 | |
---|---|
Argomenti |
Scansione di liste con Ricerca sequenziale su liste, ricerca binaria su liste ordinate. Complessità della ricerca binaria |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
4 Novembre 2019 | |
---|---|
Argomenti |
Introduzione alla ricorsione. Esempio di algoritmo ricorsivo per il calcolo del fattoriale
Esempio di algoritmo oiterativo per il calcolo del fattoriale
Il paradigma divide et impera. Somma di una sequenza applicando il paradigma divide et impera
L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione ricorsiva
L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione iterativa
Complessità computazionale dell'algoritmo MCD di Euclide |
Riferimenti al testo | Cormen, Leiserson, Rivest |
Listati proposti |
|
torna all'elenco delle lezioni
6 Novembre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su liste. |
Listati ed esercizi proposti | Esercitazione 7 |
torna all'elenco delle lezioni
6 Novembre 2019 | |
---|---|
Argomenti |
Passaggio di parametri riferimento: il caso delle liste. Esempi di programmi che modificano liste. Funzioni che restituiscono liste. Assegnazione tra riferimenti. |
Riferimenti al testo | Cormen, Leiserson, Rivest |
Listati proposti |
|
torna all'elenco delle lezioni
18 Novembre 2019 | |
---|---|
Argomenti |
Algoritmo di ordinamento insertion sort insertionSort.py |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
20 Novembre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su liste bidimensionali. |
Listati ed esercizi proposti | Esercitazione 8 |
torna all'elenco delle lezioni
20 Novembre 2019 | |
---|---|
Argomenti |
Esercizi di programmazione su liste bidimensionali |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
25 Novembre 2019 | |
---|---|
Argomenti |
Algoritmo di ordinamento a bolle - Bubble Sort (codice Bubble sort semplice) e suoi miglioramenti (codice Bubble sort migliorato) Analisi della prestazioni del bubble sort |
Link utili | Animazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms |
torna all'elenco delle lezioni
27 Novembre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su liste e liste bidimensionali. |
Listati ed esercizi proposti | Esercitazione 9 |
torna all'elenco delle lezioni
27 Novembre 2019 | |
---|---|
Argomenti |
Algoritmo di ordinamento per fusione - Merge Sort (codice merge sort) Analisi della prestazioni del merge sort |
Link utili | Animazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms |
torna all'elenco delle lezioni
2 Dicembre 2019 | |
---|---|
Argomenti |
Introduzione alla complessità computazionale Le notazioni asintotiche O(), Ω(), Θ() Esempi di classi di funzioni Uso delle notazioni asintotiche per esprimere limitazioni superiori e inferiori della complessità di algoritmi Complessità computazionale di semplici algoritmi: selection sort, bubble sort, ricerca sequenziale e ricerca binaria |
Riferimenti al testo |
dispense del corso, oppure Cormen, Leiserson, Rivest |
torna all'elenco delle lezioni
4 Dicembre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi su stringhe di caratteri e liste. |
Listati ed esercizi proposti | Esercitazione 10 |
torna all'elenco delle lezioni
4 Dicembre 2019 | |
---|---|
Argomenti |
Dimostrazione della complessità minima possibile (lower bound) per il problema dell'ordinamento basato su confronti Algoritmo di ordinamento Quick Sort (codice quick sort) Analisi della prestazioni del quick sort |
Riferimenti al testo |
dispense del corso, oppure Cormen, Leiserson, Rivest |
Link utili | Aminazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms |
torna all'elenco delle lezioni
9 dicembre 2019 | |
---|---|
Argomenti |
Analisi della complessità computazionale di algoritmi ricorsivi.
Complessità computazionale del quick sort nel caso migliore e nel caso peggiore |
Riferimenti al testo |
dispense del corso, oppure Cormen, Leiserson, Rivest |
torna all'elenco delle lezioni
11 Dicembre 2019 (laboratorio) | |
---|---|
Argomenti |
Esercizi di programmazione. |
torna all'elenco delle lezioni
11 Dicembre 2019 | |
---|---|
Argomenti |
Algoritmo per il calcolo del k-esimo elemento: selection.py e sua complessità computazionale Analisi della prestazioni dell'algoritmo pe ril k-esimo elemento Codifica dell'informazione.
|
Riferimenti al testo |
dispense del corso, oppure Cormen, Leiserson, Rivest |
torna all'elenco delle lezioni
16 dicembre 2019 | |
---|---|
Argomenti |
Lettura e scrittura di file di testo. Dizionari. |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
18 Dicembre 2019 (laboratorio) | |
---|---|
Argomenti |
Simulazione della prova d'esame di programmazione in Python. |
torna all'elenco delle lezioni
18 Dicembre 2019 | |
---|---|
Argomenti |
Simulazione della prova d'esame di teoria. |
Riferimenti al testo |
dispense del corso, oppure Cormen, Leiserson, Rivest |