PROGRAMMING Canale unico
Docente coordinatore e verbalizzante: ANGELO SPOGNARDI
Modulo 1: UNIT 2
- Tipologia
- Formazione informatica
- SSD
- INFO-01/A
- Anno
- 1º anno
- Semestre
- 1º semestre
- CFU
- 6
- Distribuzione delle ore
- 36 classroom hours, 24 laboratory hours
- Docenti
- ANGELO SPOGNARDI
Modulo 2: UNIT 1
- Tipologia
- Formazione informatica
- SSD
- INFO-01/A
- Anno
- 1º anno
- Semestre
- 1º semestre
- CFU
- 6
- Distribuzione delle ore
- 36 classroom hours, 24 laboratory hours
- Docenti
- ANDREA STERBINI
Obiettivi formativi
Obiettivi generali
Questo corso introduce agli studenti i metodi di base per la progettazione e l’analisi degli algoritmi. Studieranno vari ben noti algoritmi che risolvono problemi di base come l’ordinamento o la ricerca, insieme con i più semplici strumenti per analizzarli dal punto di vista dell’efficienza.
Obiettivi specifici:
Conoscenza e comprensione
Al termine del corso gli studenti conosceranno le metodologie di base per la progettazione e l'analisi di algoritmi iterativi e ricorsivi, le strutture dati elementari, i principali algoritmi di ordinamento e le implementazioni più elementari dei dizionari.
Applicare conoscenza e comprensione:
Al termine del corso gli studenti avranno acquisito familiarità con le principali strutture dati di base, in particolare quelle che implementano i dizionari. Sapranno spiegarne gli algoritmi e analizzarne la complessità, evidenziando come le prestazioni dipendano dalla struttura dati
utilizzata. Saranno in grado di progettare nuove strutture dati e i relativi algoritmi, rielaborando quelli esistenti; sapranno spiegare i principali algoritmi di ordinamento, illustrando le strategie di progetto sottostanti e le relative analisi di complessità; saranno in grado di confrontare i comportamenti asintotici dei tempi di esecuzione degli algoritmi studiati; saranno in grado di progettare soluzioni ricorsive di problemi e di analizzare asintoticamente gli algoritmi risultanti.
Capacità critiche e di giudizio
Lo studente avrà le basi per analizzare la qualità di un algoritmo e delle relative strutture dati, sia dal punto di vista della effettiva risoluzione del problema che da quello della efficienza computazionale con la quale il problema viene risolto.
Capacità comunicative
Lo studente acquisirà la capacità di esporre in modo chiaro ed organizzato le proprie conoscenze, capacità che verrà verificata sia mediante i quesiti presentati nelle prove scritte che durante la prova orale. Lo studente sarà in grado di esprimere un’idea algoritmica in modo rigoroso ad alto livello, in pseudocodice.
Capacità di apprendimento
Le conoscenze acquisite permetteranno allo studente di affrontare lo studio, individuale o previsto nell’ambito di un corso di laurea magistrale, di tecniche algoritmiche e di strutture dati più avanzate.
Risultati di apprendimento attesi
Obiettivi generali
Questo corso introduce agli studenti i metodi di base per la progettazione e l’analisi degli algoritmi. Studieranno vari ben noti algoritmi che risolvono problemi di base come l’ordinamento o la ricerca, insieme con i più semplici strumenti per analizzarli dal punto di vista dell’efficienza.
Obiettivi specifici:
Conoscenza e comprensione
Al termine del corso gli studenti conosceranno le metodologie di base per la progettazione e l'analisi di algoritmi iterativi e ricorsivi, le strutture dati elementari, i principali algoritmi di ordinamento e le implementazioni più elementari dei dizionari.
Applicare conoscenza e comprensione:
Al termine del corso gli studenti avranno acquisito familiarità con le principali strutture dati di base, in particolare quelle che implementano i dizionari. Sapranno spiegarne gli algoritmi e analizzarne la complessità, evidenziando come le prestazioni dipendano dalla struttura dati
utilizzata. Saranno in grado di progettare nuove strutture dati e i relativi algoritmi, rielaborando quelli esistenti; sapranno spiegare i principali algoritmi di ordinamento, illustrando le strategie di progetto sottostanti e le relative analisi di complessità; saranno in grado di confrontare i comportamenti asintotici dei tempi di esecuzione degli algoritmi studiati; saranno in grado di progettare soluzioni ricorsive di problemi e di analizzare asintoticamente gli algoritmi risultanti.
Capacità critiche e di giudizio
Lo studente avrà le basi per analizzare la qualità di un algoritmo e delle relative strutture dati, sia dal punto di vista della effettiva risoluzione del problema che da quello della efficienza computazionale con la quale il problema viene risolto.
Capacità comunicative
Lo studente acquisirà la capacità di esporre in modo chiaro ed organizzato le proprie conoscenze, capacità che verrà verificata sia mediante i quesiti presentati nelle prove scritte che durante la prova orale. Lo studente sarà in grado di esprimere un’idea algoritmica in modo rigoroso ad alto livello, in pseudocodice.
Capacità di apprendimento
Le conoscenze acquisite permetteranno allo studente di affrontare lo studio, individuale o previsto nell’ambito di un corso di laurea magistrale, di tecniche algoritmiche e di strutture dati più avanzate.
Prerequisiti
È richiesta una buona conoscenza degli argomenti della scuola superiore secondaria, in particolare di quelli legati alla matematica e alla lingua inglese.
Programma dell’insegnamento
Modulo: UNIT 2
Introduzione alla programmazione in linguaggio Python (4 ore).
Tipi di dato, variabili, assegnazioni, strutture di controllo, funzioni, classi, moduli, input/output (10 ore).
Strutture dati di base: array, stringhe, liste, tuple e dizionari (12 ore).
Utilizzo delle strutture dati di base nella creazione di programmi con tecniche procedurali e object-oriented (8 ore).
Debugging e testing di programmi (2 ore).
Differenza tra algoritmi ricorsivi e iterativi (12 ore).
Moduli Python per grafica, manipolazione file, testi (12 ore).
Modulo: UNIT 1
N/D
Testi di riferimento
Modulo: UNIT 2
Think Python 3rd Edition by Allen B. Downey
Think Python 2nd Edition by Allen B. Downey
INTRODUZIONE ALLA PROGRAMMAZIONE CON PYTHON, John V. Guttag
Modulo: UNIT 1
N/D
Bibliografia
Modulo: UNIT 2
Altri testi utili:
Guido van Rossum, Python Tutorial
Josh Cogliati, Non-Programmers Tutorial For Python
F. Pellacini, Fondamenti di Programmazione in Python
F. Pellacini, Codice di Fondamenti di Programmazione in Python
Modulo: UNIT 1
N/D
Modalità di svolgimento
Il corso verrà erogato in una serie di lezioni che si svolgeranno in presenza o in remoto o in modalità mista (a seconda della situazione sanitaria e delle decisioni prese a livello centrale dall'università).
Alcuni esercizi verranno svolti dal docente durante le lezioni e alcuni argomenti che costituiscono i prerequisiti del corso potrebbero essere presentati o ripassati.
Agli studenti verrà chiesto di risolvere semplici esercizi che, successivamente, verranno risolti collettivamente.
Gli aspetti pratici del corso costituiranno circa il 75% della durata totale.
Frequenza
La frequenza non è obbligatoria ma fortemente consigliata.
Modalità di esame
L'esame si articolerà in una prova pratica al computer.
Esempi di domande
Implement the function func1(n: int) -> int that sums all the 1s in the
binary representation of n, inverting the sign of those in even positions:
Example:
n = 31 (binary 11111) -> expected: -1 (-1 + 1 - 1 + 1 - 1)
n = 24 (binary 11000) -> expected: 0 (-1 + 1)
Given a message containing tags like [style:s_name]text[/style],
replace the tags with the styles present in the styles dictionary.
Example:
message: "Welcome to the [style:s1]jungle[/style:s1], the [style:s2]lion[/style:s2] said."
styles: {'s1': 'textit', 's2': 'b'}
Result: "Welcome to the
NOTE: you cannot use the re library!
Check if a player is able to craft an item by assembling it from the materials in their inventory.
Return True if every material required in the recipe is present in the inventory in sufficient quantity (greater than or equal).
If a recipe material does not exist or is insufficient in the inventory, the result is False.
The inventory is a list containing the names of each unit of available material.
The recipe is a dictionary in the format 'material': quantity.
Example 1:
inventory: ['iron', 'wood', 'paper', 'iron', 'iron', 'wood', 'wood']
recipe: {'iron': 3, 'leather': 1}
Result: False (leather is missing from the inventory)
Example 2:
inventory: ['iron', 'wood', 'paper', 'iron', 'iron', 'wood', 'wood']
recipe: {'iron': 2, 'wood': 4}
Result: False (available wood is 3, required wood is 4)
Define the function func4(input_filepath, output_filename) that takes as arguments
two file paths:
- The file `input_filepath` contains a sequence of words, i.e., strings
separated by spaces, tabs, or newlines.
- The file `output_filename` indicates where to save a new text file,
whose content is specified below.
The output file must contain all the words present in `input_filepath`,
repeated only once and organized into lines as follows.
The lines in the output file are arranged considering the initial letter
of the found words, in descending, case-insensitive alphabetical order.
Within each line, the words
- have the same initial letter, regardless of case;
- are separated by a space;
- are ordered by descending length and, in case of a tie, in case-insensitive
alphabetical order; if none of those criteria apply,
they must be arranged in case-sensitive alphabetic order
(i.e., case differences are considered only as a last resort).
The function must return the number of lines written in the file `output_filename`.
Example:
The file 'func4/func4_test1.txt' contains the following two lines:
cat bat rat
Condor baT
The invocation of func4('func4/func4_test1.txt', 'func4/func4_out1.txt')
should write the following three lines in the file 'func4/func4_out1.txt'
and return the value 3:
rat
cat Condor
baT bat
Implement the function func5(path_in: str, path_out: str) that loads a PNG image containing
several filled rectangles with different colors on a white background.
The function must:
- Find the rectangle(s) with the largest area and with the color with the highest components
- Save a new image where each rectangle is recolored with the above determined color
- Return the total number of rectangles in the input image.
implement the function ex1(root: tree.BinaryTree), either recursive or utilizing recursive functions or methods,
that counts the number of nodes for which the sum of all the nodes
on the left child is lower or equal to the sum of all the nodes of the right child.
A missing child is considered to have sum equal to 0.
Ex:
if root is the following tree:
______25______
| |
8__ ___2___
| | |
3 9 1
ex1(root) should return 5
Define a recursive function, or one that uses recursive functions or methods,
that receives a list which may contain positive integers or other nested lists at any level.
The function must find the list with the maximum sum, excluding any nested list,
and return its sum.
Example:
data = [1, [2, [3, 4]], 6]
values of the lists: [1, 6], [2], [3,4]
Maximum sum: 7
Programmazione delle attività didattiche
Modulo: UNIT 2
N/D
Modulo: UNIT 1
N/D
Obiettivi per lo sviluppo sostenibile - Agenda ONU 2030
- Anno accademico2026/2027
- Corso di studio a cui afferisce l’insegnamentoApplied Computer Science and Artificial Intelligence – Informatica Applicata e Intelligenza Artificiale
- Presenza obbligatoriaNo
- Linguaeng
- CFU12 CFU distribuiti in 2 moduli didattici integrati
- Durata complessiva120 ore