Qui potete trovare tutte le informazioni riguardo il contenuto delle lezioni, ed il relativo materiale. Tenete d'occhio questa pagina.

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.

Documenti di testo: testi utilizzati per gli esempi a lezione sono copie liberamente utilizzabili di libri archiviati dal progetto Gutemberg. I file sono codificati in formato 'utf-8-sig'.

Basi di dati:

<2018-12-21 Ven> Lezione 26 - Conclusione

Attenzione: la lezione è stata anticipata di due ore. Quindi si svolgerà dalle 10:30 alle 12:30, sempre in Aula 15 (CU035).

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

Slide: (schermo|stampa)

<2018-12-19 Mer> Lezione 25 - Ripasso

Facciamo un ripasso generale, rivedendo i contenuti delle lezioni e dei laboratori precedenti. Saranno gli studenti a decidere su quali argomenti ritornare, compatibilmente con le due ore a disposizione.

<2018-12-17 Lun> Laboratorio 9 - Integrare Python e SQL

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

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab09.py in maniera tale che il lo script test_lab09.py esegua con successo. Più precisamente dovrete:

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

Slide: (schermo|stampa)

File di test: test_lab09.py

<2018-12-14 Ven> Lezione 24 - 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.

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

Slide: (schermo|stampa)

<2018-12-13 Gio> Lezione di recupero

La lezione si svolge per recuperare le ore perse durante il semestre. Visto che la lezione è stata calendarizzata fuori dall'orario canonico non faremo cose nuove ma rivedremo il materiale delle precedenti lezioni e chiariremo eventuali dubbi.

Orario: 14:00–16:00, Aula 15 - CU 035

<2018-12-12 Mer> Lezione 23 - 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.

Letture: Capitoli 5 e 6 del Manuale di SQL.

Slide: (schermo|stampa)

<2018-12-10 Lun> Laboratorio 8 - SQLite

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.

Slide: (schermo|stampa)

<2018-12-07 Ven> Lezione 22 - 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.

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

Slide: (schermo|stampa)

<2018-12-05 Mer> Lezione 21 - 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. e parliamo dei criteri di integrità e di qualità di uno schema relazionale, basati sulle dipendenze funzionali e sulle forme normali. Discutiamo brevemente le operazioni di manipolazioni delle tabelle e di incrocio dei dati.

Letture: Capitoli 1, 2 e 3 del Manuale SQL.

<2018-12-03 Lun> Laboratorio 7 - Elaborazione di stringhe

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab07.py in maniera tale che il lo script test_lab07.py esegua con successo. Più precisamente dovrete:

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

Slide: (schermo|stampa)

File di test: test_lab07.py

<2018-11-30 Ven> Lezione 20 - 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.

Letture: Capitolo 11 del libro di testo.

Slide: (schermo|stampa)

<2018-11-28 Mer> Lezione 19 - 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.

Letture: paragrafi 10.1, 10.2, 10.3, 10.4, 10.5.

Slide: (schermo|stampa)

<2018-11-26 Lun> Laboratorio 6 - Dizionari e Tabelle di Dati

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab06.py in maniera tale che il lo script test_lab06.py esegua con successo. Più precisamente dovrete:

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

Slide: (schermo|stampa)

File di test: test_lab06.py

Letture:

  • Cap 9.1 del libro di python.
  • nota bene la nostra codifica per le tabelle è diversa da quella del Cap 9.3.

<2018-11-23 Ven> Lezione 18 - Ordinamenti a cascata e Radix sort

Continuiamo con algoritmi di ordinamento che funzionano in tempo lineare. Introduciamo il radix sort, come sequenza di counting sort.

(appunti)

<2018-11-21 Mer> Lezione 17 - Equazioni di ricorrenza / Counting sort

Discutiamo più in generale come risolvere equazioni di ricorrenza, e accenniamo al Master Theorem. Poi discutiamo il couting sort, un algoritmo di ordinamento che funziona in tempo lineare.

(appunti)

<2018-11-19 Lun> Laboratorio 5 - Grafici di tempi di esecuzione

Oggi proviamo a fare dei grafici che indichino i tempi di esecuzione di algoritmi. Quale sarà il più veloce?

Slide: (schermo|stampa)

<2018-11-16 Ven> Lezione 16 - Mergesort (cont.) e equazioni di ricorrenza

Terminiamo la spiegazione di Mergesort, ed in particolare della funzione che fonde due sequenze ordinate. Per analizzare il Mergesort facciamo ricorso alle equazioni di ricorrenza.

(appunti)

<2018-11-14 Mer> Lezione 15 - Struttura a pile e 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)

Questionario: bit.ly/INFO2018-15

<2018-11-12 Lun> Laboratorio 4 - Esercitazione

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab04.py in maniera tale che il lo script test_lab04.py esegua con successo. Più precisamente dovrete:

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

Slide: (schermo|stampa)

File di test: test_lab04.py

<2018-11-09 Ven> Lezione 14 - 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)

<2018-10-31 Mer> Lezione 13 - 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)

<2018-10-26 Ven> Lezione 12 - 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)

<2018-10-24 Mer> Lezione 11 - Soluzione degli esercizi del laboratorio 3

La lezione consisterà nella risoluzione degli esercizi del laboratorio 3. Poiché il laboratorio deve essere fatto con la classe divisa in due, usiamo una delle lezioni di teoria (a classe riunita) per mostrare la soluzione.

Slide: (schermo|stampa)

File di test: test_lab03.py

<2018-10-22 Lun> Laboratorio 3 - Esercitazione

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab03.py in maniera tale che il lo script test_lab03.py esegua con successo. 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)

File di test: test_lab03.py

<2018-10-19 Ven> Lezione 10 - Cicli for su intervalli e cicli while

Abbiamo continuato a discutere le iterazioni su sequenze, e in particolare i cicli for su intervalli di interi. Poi abbiamo introdotto i cicli while.

Slide: (schermo|stampa)

Letture: Cap 6 e 7. Libro di Python.

<2018-10-17 Mer> Lezione 9 - Iterazioni su sequenze

Abbiamo visto una serie di ulteriori operazioni per manipolare le sequenze. Abbiamo introdotto le iterazioni su sequenze, e più esplicitamente il ciclo for.

Slide: (schermo|stampa)

Questionario: bit.ly/INFO2018-09a

Letture: Cap 7.1, 7.3, 8.4, 8.5. Libro di Python.

<2018-10-15 Lun> Laboratorio 2 - Esercizi in laboratorio

Dovrete scrivere una serie di funzioni in python, e salvarle sul file lab02.py in maniera tale che il lo script test_lab02.py esegua con successo. 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)

File di test: test_lab02.py

<2018-10-12 Ven> Lezione 8 - Gestione degli Errori e Sequenze di dati

Abbiamo parlato della gestione degli errori in Python, e abbiamo introdotto le sequenze. In particolare abbiamo descritto i tipi lista e tupla, ed alcune delle loro caratteristiche principali.

Slide: (schermo|stampa)

Letture: Cap 6. Libro di python

<2018-10-10 Mer> Lezione 7 - Strutturare il codice

Abbiamo discusso alcuni elementi del linguaggio python come il valore None, la struttura del codice all'interno di un file (indentazione) e quella in file multipli (i moduli). Abbiamo visto come le precedenze degli operatori vadano a infuenzare e definire la valutazione di espressioni.

Slide: (schermo|stampa)

Questionario: bit.ly/INFO2018-07a

Letture: Cap 4 e Par 5.5. Libro di python

<2018-10-08 Lun> Laboratorio 1 - Esercizi e test

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. 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

Slide: (schermo|stampa)

File di test: test_lab01.py

<2018-10-05 Ven> Lezione 6 - Esecuzione condizionale ed espressioni logiche

Abbiamo introdotto i costrutti if, elif, else per l'esecuzione condizionale di codice. Contestualmente abbiamo visto le espressioni e gli operatori che operano of producono valori booleani. Per completare la trattazione abbiamo discusso elementi di logica booleana.

Slide: (schermo|stampa)

Questionario: bit.ly/INFO2018-06a

Letture: Cap 5. Libro di python

<2018-10-03 Mer> Lezione 5 - Elementi del linguaggio python

Vediamo come usare Python come una calcolatrice e per manipolare i tipi numerici più semplici. Poi vediamo l'uso delle variabili e l'uso delle stringhe.

Slide: (schermo|stampa)

Letture: Cap 3. Libro di python

<2018-10-01 Lun> Lezione 4 - Tutorial del terminale

Abbiamo visto come muoverci tra i file del computer usando i comandi del terminale. Contestualmente abbiamo cercato di far girare il nostro primo esempio di codice python dalle slide della lezione scorsa.

Tutorial (file rivisitato della Lezione 1): (schermo|stampa)

Questionario: bit.ly/INFO2018-04a

<2018-09-28 Ven> Lezione 3 - Programmi

Abbiamo descritto a grandi linee come opera una CPU nel modello di von Neumann. Abbiamo quindi visto come sia importante avere linguaggi di alto livello. Questi permattono "astrazioni" più potenti. L'astrazione è un concetto che abbiamo definito contestualmente. Abbiamo descritto la differenza tra linguaggi compilati e interpretati, così come tra linguaggi di alto e basso livello. Abbiamo introdotto brevemente Python e SQL, e detto cosa sono variabili e funzioni in contesto di Python.

Questionari:

Slide: (schermo|stampa)

<2018-09-26 Mer> Lezione 2 - Dati e programmi

Abbiamo accennato ad alcuni elementi della storia dei calcolatori, da Babbage a Turing passando per von Neumann. Dopodiché 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.

Questionari:

Slide: (schermo|stampa)

Letture: Cap 1. Libro di python

<2018-09-24 Lun> Lezione 1 - Introduzione

Abbiamo introdotto il corso, fornendo le informazioni logistiche di base. Poi abbiamo visto come effettuare i primi passi nell'ambiente linux del laboratorio: come trovare i programmi necessari allo svolgimento delle esercitazioni e come utilizzare il terminale.

Questionario: bit.ly/INFO2018-01

Slide: (schermo|stampa)

Tutorial: (schermo|stampa)

Letture: Cap 1. Libro di python