FONDAMENTI DI PROGRAMMAZIONE |
Codice
|
1015883 |
Lingua
|
ITA |
Corso di laurea
|
Informatica |
Programmazione per l'A.A.
|
2020/2021 |
Curriculum
|
Metodologico |
Anno
|
Primo anno |
Unità temporale
|
Primo semestre |
Tipo di attestato
|
Attestato di profitto |
Crediti
|
9
|
Settore scientifico disciplinare
|
INF/01
|
Ore Aula
|
36
|
Ore Esercitazioni
|
24
|
Ore Laboratorio
|
36
|
Ore Studio
|
-
|
Attività formativa
|
Attività formative di base
|
Canale: 2
Docente
|
SPOGNARDI ANGELO
(programma)
Introduzione alla programmazione tramite il linguaggio Python.
Tipi di dati, variabili, assegnamenti, strutture di controllo, funzioni, classi, moduli e Input/Output.
Strutture dati: vettori, stringhe, liste, tuple e dizionari.
Progettazione e sviluppo di programmi tramite programmazione procedurale e orientata agli oggetti.
Algoritmi ricorsivi ed iterativi.
Librerie di Python per la grafica, per la gestione dei file, per l'elaborazione di testi/html e per l'accesso ad Internet.
Debugging e testing di programmi.
 F. Pellacini, Fondamenti di Programmazione in Python
F. Pellacini, Codice di Fondamenti di Programmazione in Python
|
Date di inizio e termine delle attività didattiche
|
-- -
-- |
Modalità di erogazione
|
Tradizionale
A distanza
|
Modalità di frequenza
|
Non obbligatoria
|
Docente
|
MASI IACOPO
(programma)
== Programma di Massima:
Obiettivi generali
Introduzione alla programmazione tramite il linguaggio Python.
Obiettivi specifici
Introduzione alla programmazione tramite il linguaggio Python.
Tipi di dati, variabili, assegnamenti, strutture di controllo, funzioni, classi, moduli e Input/Output.
Strutture dati: vettori, stringhe, liste, tuple e dizionari.
Progettazione e sviluppo di programmi tramite programmazione procedurale e orientata agli oggetti.
Algoritmi ricorsivi ed iterativi.
Librerie di Python per la grafica, per la gestione dei file, per l'elaborazione di testi/html e per l'accesso ad Internet.
Debugging e testing di programmi.
Conoscenza e comprensione
Comprendere e definire i requisiti di un problema.
Decidere come rappresentare le informazioni in input e quali strutture dati usare per le elaborazioni intermedie e per l'output.
Definire l'algoritmo di soluzione.
Codificare l'algoritmo sotto forma di programma Python.
Modularizzare il programma in piccole funzioni/metodi separate.
Verificare tramite tests che il programma segua i requisiti.
Applicazione di conoscenza e comprensione
Lo studente dovrà realizzare dei compiti di programmazione per casa, scansionati durante il corso, per mettere in pratica e dimostrare le conoscenze apprese.
Alla fine del corso la prova d'esame sarà basata su una prova in laboratorio in cui lo studente dovrà risolvere e programmare alcuni esercizi.
Autonomia di giudizio
Lo studente alla fine del corso deve essere in grado di scegliere autonomamente come risolvere un problema di programmazione (analisi, implementazione e test).
Abilità comunicative
Nella fase di analisi del problema e definizione dei requisiti è importante avere una buona capacità di comprensione del linguaggio.
Capacità di apprendimento successivo
Le basi dell'analisi di un problema per comprendere le specifiche e progettare sia le strutture dati necessarie che l'algoritmo più adatto è applicabile ad altri linguaggi di programmazione e potrà aiutare nei successivi corsi di programmazione.
== Programma dettagliato basato su lezioni AA20/21
Introduzione, manipolazione di stringhe e file:
- introduzione del docente, motivazione python;
- recap su oggetti mutabili, immutabili, passaggio per riferimento;
- encoding e decoding; files di testo, open, with, read, readline, readlines, write, context manager;
- file binari, lavorare con bit e byte, salvare un intero su file binario, convertire “a mano” con python binario a decimale, endianness;
- cenni alla manipolazione di stringhe;
Programmazione funzionale e iteratori:
- funzioni come oggetti, passare funzioni a funzioni, ritornare funzioni;
- Iteratori e Generatori come eager and lazy evaluation;
- pack and unpack operators; funzioni con argomenti variabili args, kwargs;
- programmazione funzionale in python (map, filter, any, all, lambda functions);
- breve esempio di uso di iteratore zip() per unire due file;
Matrici ed Immagini:
- Definizione di Matrice;
- Matrice come lista di liste;
- Creare Matrici (vari metodi; da doppio ciclo a funzionale con map); Compound Object; Differenza fra Shallow e Deep Copy;
- Immagini come matrici; spazio colori RGB; sistema di riferimento con matrici;
- Disegnare su immagini/matrici (disegnare linee allineati agli assi, rettangoli, controllo per disegnare dentro matrice);
- Cenni alla manipolazione di immagini (flip rispetto ad asse verticale e orizzontale, iterativo e funzionale);
Immagini, Manipolazione Immagini e Oggetti:
- Chiarimenti enumerate e zip
- Ancora su manipolazioni di immagini, flip verticale e orizzontale
- PEP 8 (code style) e PEP 257 (doc string)
- Ruotare una immagine, clockwise and counterclockwise; trasporre una matrice; versioni iterative e funzionali
- Filtro di sfocatura (blurring)
- Caso di applicazione: come sfuocare solo background similare al filtro di “Zoom” e affini
- Programmazione orientata agli oggetti
- Oggetti e classi in python; ereditarieta’
- Esempio per modellare un colore non come tupla ma come classe
Ancora sulla programmazione ad oggetti
- Ripasso su cosa e’ una classe; cosa e’ un oggetto, attributi e metodi; classi in Python
- Sottoclassi, ereditarieta’, overloading degli operatori
- Attributi di classi e attributi di instanza oggetto; metodi di classe
- Breve cenni sui Decoratori in Python (con riferimento a @classmethod)
- Gestione delle eccezioni in Python, costrutto try except finally.
Homework, Overloading e Ricorsione:
- Chiarimento su HW6
- Chiarimento su overloading operatore __eq__
- Package and module in python; come python cerca i moduli; sys.path
- «Libreria» di elaborazione immagini con oggetti come un package da usare
- Uso di decoratri per snellire il codice
- Analisi della libreria e digressione sulle scelte di progettazione
- Il concetto di ricorsione; strutture dati coda (queue) e pila (stack); stack di un programma
- Fibonacci ricorsivo e albero di ricorsione
Fibonacci e Funzioni ricorsive
- Precisazioni su come affrontare HW
- Complessita’ Fibonacci naive (ingenuo, versione di base); crescita esponenziale, esempio dei chicchi di grano su scacchiera
- Fibonacci con “memoization”; cenni su dynamic programming (DP); Fibonacci iterativo
- Sottoproblemi + caso base; divide and conquer
- callable objects in python and the overloading of __call__
- Esempio di uso di ricorsione per stampare una stringa senza for loop
- Cenni al filesystem come albero di ricorsione
Vari esempi di ricorsione:
- Breve cenno su non modificare moduli nel HW
- [Ricorsione] Riassumere come stampare stringa carattere per carattere senza for
- [Ricorsione] Espressioni Return and Pass
- [Ricorsione] Filesystem come albero di ricorsione
- [Ricorsione] Stringa palindroma (iterativa, ricorsiva)
- [Ricorsione] Albero binario, ricerca in un albero, debug con pudb della ricerca
Alberi e ricerca in profondita':
- Filosofia di studio e sulla preparazione all’esame
- Annuncio che faccio lezione anche al canale 1
- Come creare un iteratore alla classe imagemat per modellare matrici
- Analisi di come funziona TraceRecursion del Prof. Sterbini
- Breve recap di Iterator, Iterable, Generator; funzioni con argomenti variabili (args, kwargs)
- [Ricorsione] Enumerare (e ottenere) le permutazioni di un insieme come problema ricorsivo
- [Ricorsione] Ricerca in profondita’ (depth-first-search) DFS (pre/in/post order) su albero binario
- [Ricorsione] Espressioni aritmetiche come albero binario (navigarle in pre/in/post)
Homework:
- Recap del HW6
- Consigli strategici su come affrontare gli HW e gestire il tempo
- Analisi del problema HW6 e possibili modi per risolverlo, idee varie e schemi di soluzione
- Analisi dei dati forniti
- Ripasso di immagini/matrici come lista di liste (differenza fra accesso riga e colonna)
- Importanza di come si scrivere il codice e il suo stile
- Analisi nel dettaglio della soluzione e del codice dello studente Simone Sestito (1937764). Lo ringrazio vivamente per aver fornito il suo codice.
- Cenni a DAG (Direct Acyclic Graph)
Espressioni Artimetiche come Albero Binario
- Ripasso su callable objects
- Ripasso su *args, **kwargs
- Un nostro defaultdict (usare con attenzione e cautela)
- Chiarimenti aggiuntivi su TraceRecurision (basati su __call__)
- Espressioni aritmetiche come albero binario
- Concetto di parser e grammatica
- Creare un parser per espressioni aritmetiche con albero binario
- Gestione parentesi
- Gestione espressione e split in token
- Parser completo di Espressione Aritmetiche
- Risoluzione e Print della espressioni in-order
- Analisi soluzione di HW6 codice Prof. Sterbini
Alberi di Gioco:
- Da albero Binario ad albero N-ario
- Branching factor di un albero
- Ripasso del Filesystem come albero N-ario con branching factor variabile
- Recap Ricorsione per calcolo permutazioni, ma con analisi branching factor e complessita’
- Albero di Gioco: Nodo : Stato = Arco : Mossa; Albero di gioco come albero N-ario.
- Esempio di “enumerazione” delle mosse possibili nel gioco del filetto con ricorsione
- Indicizzazione della scacchiera solamente con [] e slice e.g. A[:,c] seleziona colonna c-th.
- Stesura del codice modulare per enumerazione mosse filetto
- Brevissimi cenni a soluzione di HW8 Prof. Sterbini
Homework e Conclusione Corso:
- Analisi dettagliata soluzione di HW8 codice Prof. Sterbini
- Alcune varianti su come risolvere parte HW8 come enumerazione di stati di un Automa Stati Finiti
- Analisi complessita’ dell esempio HW8 esponenziale
- Da versione ricorsive a come si scrivere una versione iterativa
- Ripasso su Alberi di Gioco
- Cenni al modulo python argparse per gestire input complessi in ingresso
- Breve introduzione a Jupyter Notebook
 I libri di testo consigliati sono i seguenti:
[ita] Allen B. Downey - Pensare in Python
[eng] Allen B. Downey - Thinking in Python 2nd edition
Altri libri (dalla corso gemello in inglese del Prof. Di Ciccio ):
Charles Dierbach - Introduction to Computer Science Using Python: A Computational Problem-Solving Focus
Python 3 Tutorial - https://docs.python.org/3/tutorial/
Altre risorse utili:
PEP 8 - Style Guide for Python Code - Come scrivere codice elegante in python - https://www.python.org/dev/peps/pep-0008/
PEP 257 - Docstring Conventions - Documentazione con docstring - https://www.python.org/dev/peps/pep-0257/
|
Date di inizio e termine delle attività didattiche
|
-- -
-- |
Date degli appelli
|
Date degli appelli d'esame
|
Modalità di erogazione
|
A distanza
|
Modalità di frequenza
|
Non obbligatoria
|
Canale: 1
Docente
|
STERBINI ANDREA
(programma)
Introduzione alla programmazione tramite il linguaggio Python.
Tipi di dati, variabili, assegnamenti, strutture di controllo, funzioni, classi, moduli e Input/Output.
Strutture dati: vettori, stringhe, liste, tuple e dizionari.
Progettazione e sviluppo di programmi tramite programmazione procedurale e orientata agli oggetti.
Algoritmi ricorsivi ed iterativi.
Librerie di Python per la grafica, per la gestione dei file, per l'elaborazione di testi/html e per l'accesso ad Internet.
Debugging e testing di programmi.
 Vi consigliamo di seguire uno dei libri:
- Allen B. Downey Pensare in Python
- Allen B. Downey Thinking in Python 2nd edition (in inglese)
- John V. Guttag Introduzione alla programmazione con Python. Dal pensiero computazionale al machine learning
Altri libri molto utili.
- F. Pellacini, Fondamenti di Programmazione in Python
- The Python 3 tutorial
- Josh Cogliati, Tutorial per principianti in Python (python 2.7)
|
Date di inizio e termine delle attività didattiche
|
-- -
-- |
Date degli appelli
|
Date degli appelli d'esame
|
Modalità di erogazione
|
Tradizionale
|
Modalità di frequenza
|
Non obbligatoria
|
Metodi di valutazione
|
Valutazione di un progetto
|
Docente
|
SPOGNARDI ANGELO
(programma)
Introduzione alla programmazione tramite il linguaggio Python.
Tipi di dati, variabili, assegnamenti, strutture di controllo, funzioni, classi, moduli e Input/Output.
Strutture dati: vettori, stringhe, liste, tuple e dizionari.
Progettazione e sviluppo di programmi tramite programmazione procedurale e orientata agli oggetti.
Algoritmi ricorsivi ed iterativi.
Librerie di Python per la grafica, per la gestione dei file, per l'elaborazione di testi/html e per l'accesso ad Internet.
Debugging e testing di programmi.
 F. Pellacini, Fondamenti di Programmazione in Python
F. Pellacini, Codice di Fondamenti di Programmazione in Python
|
Date di inizio e termine delle attività didattiche
|
-- -
-- |
Modalità di erogazione
|
Tradizionale
A distanza
|
Modalità di frequenza
|
Non obbligatoria
|
|
|