Diario delle lezioni

Giovedì 19 Dicembre. Simulazione della prova pratica

  • Materiale studenti: testo degli esercizi assegnati in aula, file studente.txt (da compilare e salvare immediatamente), foglio di sintesi pyhton3, file di test pubblici messi a disposizione degli studenti durante la prova d'esame
  • File di test privati, simili a quelli usati dai docenti per la correzione dei compiti

Lunedì 16 Dicembre. Simulazione della prova di teoria


Giovedì 12 Dicembre. Esercitazione su stringhe, liste, ordinamento con file di test


Martedì 10 Dicembre. Equazioni di ricorrenza: il teorema master. Analisi del tempo di esecuzione dell'algoritmo di ricerca binaria. Ordinamento di numeri interi piccoli: counting sort. Esercizio: date due stringhe, sono l'una anagramma dell'altra? Due soluzioni basate su ordinamento.

  • Materiale di studio: capitoli 2 e 4 del libro Algoritmi e strutture dati.

Lunedì 9 Dicembre. Quicksort: algoritmo e analisi nel caso migliore e peggiore. Il lower bound al problema dell'ordinamento tramite confronti di elementi: alberi di decisione.


Giovedì 5 Dicembre. Esercitazione su liste con file di test


Martedì 3 Dicembre. Mergesort. Equazioni di ricorrenza.


Lunedì 2 Dicembre. Notazione asintotica. Algoritmi di ordinamento quadratici.

  • Materiale di studio: capitoli 2 e 4 del libro Algoritmi e strutture dati.

Giovedì 28 Novembre. Esercitazione su liste con file di test


Martedì 26 Novembre. Introduzione all'analisi di complessità di un algoritmo. Caso di studio: l'algoritmo di Fibonacci ricorsivo. Albero della ricorsione. Equanzione di ricorrenza. Soluzione della ricorrenza sfruttando proprietà dell'albero.

  • Materiale di studio: capitolo 1 del libro Algoritmi e strutture dati.

Lunedì 25 Novembre. Ricerca binaria: implementazione ricorsiva. I conigli di Fibonacci: formalizzazione del problema, rappresentazione tramite alberi. Cenni alla soluzione tramite uso della sezione aurea. Soluzione ricorsiva ed iterativa: implementazione e confronto prestazionale.


Giovedì 21 Novembre. Esercitazione su liste e matrici (liste di liste) con file di test.


Martedì 19 Novembre. Dimostrazione formale della corretttezza dell'algoritmo di Euclide. Cenni al numero di iterazioni. Ancora sulla ricorsione. Algoritmo di Euclide ricorsivo. Ricerca binaria: implementazione iterativa.


Lunedì 18 Novembre. Ricorsione. Visualizzazione degli stack frame in PythonTutor. Esempi: fattoriale, somma degli elementi in una lista. Algoritmo di Euclide: implementazione iterativa.


Giovedì 7 Novembre. Esercitazione su liste con file di test.


Martedì 5 Novembre. Ancora sulle liste: cloning, mutabilità ed iterazione, esempio aliasing con liste di liste. Esercizio: date due stringhe, sono l'una anagramma dell'altra? Due possibili soluzioni.


Lunedì 4 Novembre. Errori ed eccezioni. Istruzioni try ... except ... else, raise, assert. Formattazione di stringhe: il metodo format, allineamento a destra, a sinistra o al centro.


Martedì 29 ottobre. Liste: definire una lista, cambiare un elemento (mutabilità), iterare su una lista, aggiungere e rimuovere elementi, convertire una stringa in lista e viceversa, ordinare una lista. Considerazioni sull'aliasing.


Lunedì 28 ottobre. Stringhe. Lunghezza di una stringa. Indicizzazione. Slicing. Immutabilità. Come iterare su una stringa. Esercizi: 1) contare le vocali; 2) rovesciare una stringa; 3) verificare se una stringa è palindroma.

  • Materiale di studio: capitolo 8 del libro Think Python.

Giovedì 24 ottobre. Testo degli esercizi assegnati. Soluzione esercizio terne pitagoriche.


Martedì 22 ottobre. Scrivere codice modulare. Svolgimento esercizio del laboratorio del 17 ottobre: stampa di una griglia. Raffinamenti progressivi: 1) soluzione naive; 2) soluzione con funzioni di raddoppio; 3) una ulteriore astrazione; 4) soluzione iterativa.


Lunedì 21 ottobre. Costrutti di iterazione: keyword while, for, break. La funzione range. Cicli nidificati. Esercizio testa o croce.


Giovedì 17 ottobre. Testo degli esercizi assegnati.


Martedì 15 ottobre. Lezione annullata.


Lunedì 14 ottobre. Funzioni. Scope delle variabili. Moduli. La funzione help().


Giovedì 10 ottobre (LAB). Testo degli esercizi assegnati (branching e funzioni). Soluzione esercizio 1.


Martedì 8 ottobre. Riutilizzo del codice tramite funzioni. Scrivere ed invocare funzioni. Stack frame, esecuzione in ordine LIFO (Last In First Out). L'istruzione return. Esempi al calcolatore. Visualizzazione degli stack frame tramite Python Tutor.


Lunedì 7 ottobre. Prendere decisioni. Istruzioni di branching: if, else, elif. Istruzioni if annidate. Indentazione: tab vs. spazi. Confronto tra stringhe.


Giovedì 3 ottobre (LAB). Testo degli esercizi assegnati (espressioni, variabili, input/output).


Martedì 1 ottobre. Variabili: istruzioni di assegnazione, significato dell'operatore =, binding, dynamic typing. Cenni alle stringhe, operatori di concatenazione. I/O: uso di print() e input().


Lunedì 30 settembre. Fondamenti di programmazione in Python: valori, tipi, espressioni. Tipi int, float, bool, NoneType. Problemi di precisione nella rappresentazione dei float. Uso di type(). Casting implicito o esplicito. Precedenza degli operatori.


Giovedì 26 settembre (LAB). Lavorare in Python: modalità interattiva o script, strumenti on-line e modalità di installazione. Lavorare in laboratorio: browser, editor, terminale (shell). Prompt e linea di comando. Cenni sulla struttura di un file system gerarchico: file e cartelle. Uso della shell Linux (o Terminale in Mac OS, o Prompt dei comandi in Windows). Navigazione nel file system e comandi ls, pwd, cd, mkdir, rmdir, rm, mv. Esempi.


Martedì 24 settembre. Introduzione al corso, organizzazione delle lezioni, modalità e date d'esame. Introduzione al pensiero computazionale. Conoscenza dichiarativa o imperativa. Architettura di Von Neumann. Problemi, algoritmi e programmi. Linguaggi di programmazione: sintassi e semantica, confronto con i linguaggi naturali, interpreti e compilatori, errori sintattici e semantici, debugging, cenni al linguaggio Python.