Qui potete trovare tutte le informazioni riguardo il contenuto delle lezioni, ed il relativo materiale. Tenete d'occhio questa pagina. Il codice di alcune funzioni viste durante il corso si trova nel file:

che verrà aggiornato durante il corso. Le basi di dati su cui esercitarvi sono:

<2017-12-20 Mer> Lezione 22 - Lezione conclusiva

Ricapitoliamo il programma svolto durante il corso, e discutiamo le modalità di esame.

Slide: (schermo|stampa)

Esempi di soluzioni del Laboratorio 11: lab11.py

<2017-12-18 Lun> Laboratorio 11 - Integrare Python e SQL

Vediamo come si possano interrogare basi di dati (in questo caso SQLite) utilizzando Python.

Slide: (schermo|stampa)

<2017-12-15 Ven> Lezione 21 - SQL - Elementi più avanzati

In questa lezione vediamo come eseguire query SQL che calcolano funzioni sulle colonne della tabella: i cosiddetti operatori aggregati (o funzioni di gruppo). Concludiamo poi le lezioni su SQL con una descrizione sommaria di quelle caratteristiche di SQL che non faremo in tempo a vedere.

Sezioni 4.5, 4.6, 4.7 e Capitolo 7 del manuale SQL.

Slide: (schermo|stampa)

<2017-12-14 Gio> Lezione di recupero 2

La lezione si svolge nell'Aula 15 del CU035. Ovvero nella solita aula dove vengono fatte le lezioni teoriche. L'idea è di rivedere il materiale delle precedenti lezioni e chiarire dubbi.

Orario: 14:30–17:30

<2017-12-13 Mer> Lezione 20 - Query SQL - Combinare più tabelle

Vediamo come costruire query SQL che combinano i dati di più tabelle. In particolare come utilizzare il prodotto cartesiano e i vari tipi di operatori JOIN. Contestualmente vedremo l'uso di foreign key per impostare vincoli di integrità referenziale.

Capitoli 5 e 6 del manuale SQL.

Slide: (schermo|stampa)

<2017-12-11 Lun> Laboratorio 10 - Suggerimenti per lo sviluppo Python

Per migliorare ed esercitarsi nella programmazione Python ho preparato delle funzioni per testare i programmi, che sono contenute in infosefa.py. Vediamo queste funzioni per la costruzione di test, e poi discutiamo come completare il codice in minmods.py, utilizzando un ambiente di sviluppo (e.g. Thonny) con il debugger integrato.

Slide: (schermo|stampa)

<2017-12-07 Gio> Lezione di recupero 1

La lezione si svolge nell'Aula 15 del CU035. Ovvero nella solita aula dove vengono fatte le lezioni teoriche. L'idea è di rivedere il materiale delle precedenti lezioni e chiarire dubbi.

Orario: 13:00–16:00

<2017-12-06 Mer> Lezione 19 - Query SQL su singole tabelle

Prima spieghiamo come è strutturata una tabella e come specificare vincoli su di essa. Poi vediamo come effettuare query SQL che riguardino una singola tabella, in particolare le espressioni che possono essere utilizzate nella clausola where e l'uso di order by.

Sezioni 4.1, 4.2, 4.3, 4.8 del Manuale di SQL.

Slide: (schermo|stampa)

<2017-12-04 Lun> Laboratorio 9 - SQLite e esercizi Python

Vediamo come usare il comando SQLite per accedere alle basi di dati di prova. In questo modo potete cominciare ad esplorare questi dati usando comandi SQL. Vediamo poi le soluzioni degli esercizi Python della volta scorsa.

Slide: (schermo|stampa)

Esempi di soluzioni del Laboratorio 8: lab08.py

<2017-12-01 Ven> Lezione 18 - Algebra relazionale

Concludiamo le cose dette nella lezione precedente. Ovvero i criteri di integrità e di qualità di uno schema relazionale, basati sulle dipendenze funzionali e sulle forme normali. Discutiamo poi l'algebra relazionale, ovvero le operazioni di manipolazioni delle tabelle e di incrocio dei dati.

Capitolo 3 del Manuale SQL.

<2017-11-29 Mer> Lezione 17 - Introduzione alle basi di dati

Introduciamo il concetto di sistema informativo e di base di dati. Facciamo una breve panoramica sui metodi e sulle fasi di progettazione di una base di dati, e sulle problematiche da affrontare. Introduciamo poi il modello relazionale.

Capitoli 1 e 2 del Manuale SQL.

<2017-11-27 Lun> Laboratorio 8 - Elaborazione di stringhe

Più precisamente dovrete:

  • salvare le vostre funzioni in un file lab08.py
  • scaricare il file test_lab08.py
  • eseguire, nella stessa cartella che li contiene
$ python3 test_lab08.py

Slide: (schermo|stampa)

<2017-11-24 Ven> Lezione 16 - Ricerca in documenti di testo

Vediamo come utilizzare le operazioni su stringhe e file per calcolare statistiche su file di testo. In particolare costruiremo una funzione che dati alcuni file, li classifica in base alla frequenza con cui delle chiavi di ricerca occorrono al loro interno.

Capitolo 11 del libro di testo.

I documenti utilizzati per gli esempi a lezione sono copie liberamente utilizzabili di libri archiviati dal progetto Gutemberg.

<2017-11-22 Mer> Lezione 15 - Uso di file e dati

Le informazioni su cui si lavora possono essere salvati su supporti di memorizzazione permanenti. Per fare questo i sistemi operativi forniscono il concetto di file vedremo come leggere e scrivere dati su file.

Capitolo 10 del libro di testo.

<2017-11-20 Lun> Laboratorio 7 - Ripasso ed esercitazione

Esercitazione libera. Sono a disposizione per aiutare e per discutere in dettaglio alcune soluzioni di esercizi, nel caso diversi studenti vogliano farlo.

<2017-11-17 Ven> Lezione 14 - Equazioni di ricorrenza e ordinamenti lineari

Discutiamo più in generale come risolvere equazioni di ricorrenza, e accenniamo al Master Theorem. Poi continuiamo con algoritmi di ordinamento che funzionano in tempo lineare.

(appunti)

<2017-11-15 Mer> Lezione 13 - Mergesort

Oggi vediamo il Mergesort, un algoritmo di ordinamento per ``per confronto'' che raggiunge l'efficienza asintotica ottimale. Prima però discutiamo un po' della struttura dati di pila (o stack).

(appunti)

<2017-11-13 Lun> Laboratorio 6 - Grafici di tempi di esecuzione

Oggi proviamo a fare dei grafici che indichino i tempi di esecuzione di bubblesort e insertion sort. Chi sarà il più veloce?

Slide: (schermo|stampa)

Esempi di soluzioni del Laboratorio 3: lab03.py

<2017-11-03 Ven> Lezione 12 - Bubblesort e ordinamenti per confronti

Oggi vediamo il Bubblesort, un algoritmo classico di ordinamento. Successivamente discutiamo gli algoritmi ``per confronto'', e vediamo che questi non possono essere resi più veloci di un certo limite.

Slide: (schermo|stampa)

<2017-10-30 Lun> Laboratorio 5 - Efficienza sperimentale

Discutiamo il problema di testare l'efficienza sperimentale degli algoritmi realizzati. In particolare dovete provare le vostre implementazioni di

  • ricerca lineare
  • ricerca binaria
  • ordinamento di una lista

sottoponendo input sempre più grandi. Potete generare questi input utilizzando la funzione numeriacaso dal modulo infosefa.py, come da slides.

Slide: (schermo|stampa)

<2017-10-27 Ven> Lezione 11 - Ordinamenti e crescita della complessità

Introduciamo il concetto di complessità di un algoritmo. Per farlo discutiamo due semplici algoritmi di ordinamento, e poi introduciamo la notazione asintotica.

(appunti)

<2017-10-25 Mer> Lezione 10 - Efficienza computazionale

Introduciamo un paio di esempi di ricerca binaria, per illustrare l'enorme differenza di prestazioni tra ricerca lineare e binaria. Questo ci fornisce la scusa per cominciare a discutere di efficienza computazionale.

(appunti)

<2017-10-23 Lun> Laboratorio 4 - Ripasso ed esercitazione

Rivedremo gli esercizi fatti nelle lezioni di laboratorio precedenti. Molti studenti non sono ancora in grado di risolvere gli esercizi o eseguire i programmi di test.

AVVISO: questo lunedì non farò ricevimento. Gli studenti che volevano venire a ricevimento sono pregati di contattarmi per riorganizzare durante questa settimana.

<2017-10-20 Ven> Lezione 9 - Ancora con l'induzione matematica

Continuiamo a trattare l'induzione matematica andando oltre la versione più elementate.

(appunti)

<2017-10-18 Mer> Lezione 8 - Induzione matematica

Abbiamo descritto lo strumento logico detto induzione matematica. Definizioni per induzione e dimostrazioni per induzione.

(appunti)

<2017-10-16 Lun> Laboratorio 3 - Esercizi in Python

Più precisamente dovrete:

  • salvare le vostre funzioni in un file lab03.py
  • scaricare il file test_lab03.py
  • eseguire, nella stessa cartella che li contiene
$ python3 test_lab03.py

Slide: (schermo|stampa)

Esempi di soluzioni del Laboratorio 2: lab02.py

<2017-10-13 Ven> Lezione 7 - Modello a oggetti. Dizionari e Insiemi.

Python è un linguaggio di programmazione in cui ogni entità è un oggetto, che ha una sua interfaccia e può essere manipolato in maniera strutturata. Tutti i tipi e le strutture dati che il linguaggio fornisce possono essere utilizzate in questo modo. A lezione abbiamo chiarito degli elementi riguardanti la sintassi per l'uso di oggetti. Inoltre abbiamo introdotto i tipi di dati dict e set.

Capitoli 8 e 9 del libro di testo.

<2017-10-11 Mer> Lezione 6 - Iterazione su sequenze.

La lezione riguarda un tema fondamentale: come ripetere una serie di istruzioni numerose volte, con piccole variazioni, per costruire programmi in grado di effettuare un numero di operazioni potenzialmente illimitato.

Capitolo 7 del libro di testo.

<2017-10-09 Lun> Laboratorio 2 - Esercizi in Python

Più precisamente dovrete:

  • salvare le vostre funzioni in un file lab02.py
  • scaricare il file test_lab02.py
  • eseguire, nella stessa cartella che li contiene
$ python3 test_lab02.py

Slide: (schermo|stampa)

Esempi di soluzioni del Laboratorio 1: lab01.py

<2017-10-06 Ven> Lezione 5 - Sequenze, liste e tuple. Moduli.

A lezione abbiamo visto l'uso di sequenze, ed in particolare di liste e tuple. In questo contesto abbiamo discusso l'immutabilità e la mutabilità.

Attenzione: a lezione ho detto una cosa errata!! Le tuple possono contenere liste e queste liste possono essere modificate.

tupla = (1,2,[3,4])
tupla[0] = "mod"           # modifico un elemento della tupla (Errore)
tupla[-1][0] = "mod"       # modifico un elemento della lista interna
print(tupla)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
(1, 2, ['mod', 4])

La nozione di immutabilità delle tuple è superficiale e si ferma all'identità degli oggetti, non al loro contenuto. Ne discuteremo in laboratorio all'inizio della lezione. Resta il fatto che python non accetta questo tipo di tuple in alcune operazioni.

database = {}
database[(1,2,(3,4),5)] = "prima prova"     # associamo una stringa a (1,2,(3,4),5)
print( database[(1,2) + ((3,4),5)])         # l'indice può essere ricalcolato
database[(1,2,[3,4],5)] = "seconda prova"   # questa istruzione dà errore
prima prova
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

Slide: (schermo|stampa)

<2017-10-04 Mer> Lezione 4 - Logica booleana, Costrutto IF

Abbiamo visto i rudimenti della logica booleana e degli operatori proposizionali not, and, or, xor. Abbiamo visto come utilizzare le condizioni booleane per adoperare if, else, elif.

Tutto quello che è stato fatto a lezione è sulle slide, anche se non siamo riusciti ad adoperarle.

Slide: (schermo|stampa)

<2017-10-02 Lun> Laboratorio 1 - Primi esercizi in Python

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab01.py in maniera tale che il lo script test_lab01.py esegua con successo. Attenzione: la versione precedente era errata! Scaricate l'ultima versione.

Più precisamente dovrete:

  • salvare le vostre funzioni in un file lab01.py
  • scaricare il file test_lab01.py
  • eseguire, nella stessa cartella che li contiene
$ python3 test_lab01.py

Visto che d'ora in poi useremo molto la riga di comando, è il caso che leggiate un piccolo tutorial su come fare le operazioni di base come muoversi tra cartelle. Django Girls Tutorial (italiano)

Slide: (schermo|stampa)

<2017-09-29 Ven> Lezione 3 - Elementi del linguaggio Python

Abbiamo visto come operare su dati numerici (interi e in virgola mobile) e come operare sulle stringhe. Abbiamo introdotto le variabili e le funzioni come meccanismi di astrazione.

Slide: (schermo|stampa)

<2017-09-27 Mer> Lezione 2 - Dati e programmi

Mi scuso per le difficoltà iniziali della lezione di oggi. Farò di tutto perché non si ripetano.

La lezione si è concentrata prima sulla codifica di dati, ovvero di come vengano codificati numeri interi in binario e esadecimale, e testi in ASCII, ASCII esteso, e UTF-8. Sono stati fatti anche esempi riguardanti la codifica di immagini e segnali.

Poi ci siamo spostati sul tema dei programmi. Sono stati introdotti il linguaggio macchina della CPU, e si è visto come le astrazioni siano strumenti importanti per la progettazione e manutenzione di un programma. Abbiamo introdotto il concetto di linguaggi di alto e basso livello, il concetto di compilatore ed interprete. Sono stati brevemente introdotti Python e SQL.

Slide: (schermo|stampa)

<2017-09-25 Lun> Lezione 1 - Introduzione

Abbiamo introdotto il corso, fornendo le informazioni logistiche di base. Poi abbiamo visto alcuni elementi della storia dell'informatica e di come sia nata l'architettura dei calcolatori.

Slide: (schermo|stampa)