Programmazione
A.A. 2024/2025
Obiettivi formativi
Obiettivo dell'insegnamento e' introdurre gli studenti alla programmazione imperativa strutturata e al problem solving in piccolo
Risultati apprendimento attesi
Lo studente dovra' aver acquisito la capacita' di scrivere e mettere a punto un programma per automatizzare un compito semplice; inoltre dovrebbe saper comprendere il funzionamento di un semplice frammento di codice nonche' stabilire le cause di un malfunzionamento ed essere in grado di intervenire per correggerlo
Periodo: Primo semestre
Modalità di valutazione: Esame
Giudizio di valutazione: voto verbalizzato in trentesimi
Corso singolo
Questo insegnamento può essere seguito come corso singolo.
Programma e organizzazione didattica
Edizione unica
Responsabile
Periodo
Primo semestre
Programma
[TWG = The Way to Go: A Thorough Introduction to the Go Programming Language by Ivo Balbaert = Ivo Balbaert: Programmare in go. Pearson, ISBN 8891909661]
- Introduzione all'insegnamento. Architettura del calcolatore. Che cos'è l'informatica. Linguaggi di programmazione (macchina, assembly, alto livello). Il calcolatore come macchina programmabile.
- La macchina di von Neumann. Informazione (bit, byte,...). Caricamento in RAM del programma, fetch-decode-execute. Architettura della CPU: ALU e CU. Un esempio di CPU con relativo linguaggio assembly.
- Ciclo di vita del software. Strumenti per la programmazione. Storia di go. Il primo programma in go [TWG4]. Il go tool. Compilazione. Esecuzione. Formattazione. Documentazione. [TWG3]
- Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
- Variabili: nome, tipo, valore, visibilità (scope). Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment. [TWG4]
- I/O di base: fmt.Println, fmt.Print, fmt.Scan. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Variabili inutilizzate e blank variable. [TWG4]
- Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi. [TWG5]
- Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi.
- Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi. [TWG5]
- I caratteri (ASCII, Unicode, UTF-8). Tipo rune. Tipo string: differenze fra raw e UTF-8. Funzione len. Quarta forma del ciclo for (range). [TWG4]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- Esercizi con i cicli semplici e funzioni. Istruzioni break e continue. [TWG5]
- Esercizi con i cicli annidati.
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. [Dispense, TWG4, TWG5]
- Selezione multiaria (switch). [TWG5]
- Esercizi. Pacchetto strconv e pacchetto strings. [TWG]
- Puntatori: operatori * e &. La funzione new. [TWG4]
- Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
- Array e slice. Inizializzatori. Applicazione dei for range. Funzione append. [TWG7]
- Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
- Generazione numeri pseudocasuali. Pacchetto math. Esercizi.
- Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi. [TWG8]
- Ricorsione. Stack di esecuzione. [TWG6]
- Esercizi sulla ricorsione.
- Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch.
- Pacchetti e struttura. Visibilità. Documentare un pacchetto. Metodi. [TWG9 (cenni)]
- Interfacce (cenni). Esempi: Stringer, Reader, Writer. [TWG10, TWG11]
- Conversione di tipi, switch su tipi, argomenti variadici. [TWG11, TWG6]
- Tipi funzione e chiusure (cenni). Esempi dalle librerie (ordinamento, shuffling, ricerca in stringhe). L'esempio dell'integrazione numerica (metodo Monte-Carlo). [TWG6]
- I/O avanzato. File, istruzioni panic e defer. [TWG6, TWG12, TWG13]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing.
- Esempio: un pacchetto per le liste concatenate semplici di stringhe.
- Testing unitario e funzionale. (E2E) [TWG13]
- Il linguaggio C. Il gcc. Differenze sintattiche: punto-e-virgola, parentesi nelle strutture di controllo, dichiarazioni di variabili, tipi e funzioni. Differenze nelle strutture di controllo del flusso (switch, while, do-while). Uso di istruzioni semplici nelle strutture di controllo. Inclusione vs. importazione.
- Assenza di stringhe, slice, mappe. Uso dei char[] per le stringhe. Tipi elementari e dipendenza dal compilatore; uso di tipi specifici (stdint.h, bool.h). Cast impliciti. Definizione di macro. Funzioni di libreria. Parametri da riga di comando.
- Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free.
- Introduzione all'insegnamento. Architettura del calcolatore. Che cos'è l'informatica. Linguaggi di programmazione (macchina, assembly, alto livello). Il calcolatore come macchina programmabile.
- La macchina di von Neumann. Informazione (bit, byte,...). Caricamento in RAM del programma, fetch-decode-execute. Architettura della CPU: ALU e CU. Un esempio di CPU con relativo linguaggio assembly.
- Ciclo di vita del software. Strumenti per la programmazione. Storia di go. Il primo programma in go [TWG4]. Il go tool. Compilazione. Esecuzione. Formattazione. Documentazione. [TWG3]
- Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Struttura generale di un programma go: programma, pacchetti, sorgenti. La libreria standard. [TWG4]
- Variabili: nome, tipo, valore, visibilità (scope). Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment. [TWG4]
- I/O di base: fmt.Println, fmt.Print, fmt.Scan. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Variabili inutilizzate e blank variable. [TWG4]
- Selezione binaria (if). Il tipo bool e gli operatori booleani. Esercizi. [TWG5]
- Ancora sull'if: variabili locali all'if (locali ai blocchi; locali al costrutto). Esempi.
- Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi. [TWG5]
- I caratteri (ASCII, Unicode, UTF-8). Tipo rune. Tipo string: differenze fra raw e UTF-8. Funzione len. Quarta forma del ciclo for (range). [TWG4]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- Esercizi con i cicli semplici e funzioni. Istruzioni break e continue. [TWG5]
- Esercizi con i cicli annidati.
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. [Dispense, TWG4, TWG5]
- Selezione multiaria (switch). [TWG5]
- Esercizi. Pacchetto strconv e pacchetto strings. [TWG]
- Puntatori: operatori * e &. La funzione new. [TWG4]
- Type: alias e definizioni. Struct. Esercizi con puntatori e struct.
- Array e slice. Inizializzatori. Applicazione dei for range. Funzione append. [TWG7]
- Esercizi. Subslicing. fmt.Printf. Argomenti da riga di comando.
- Generazione numeri pseudocasuali. Pacchetto math. Esercizi.
- Mappe. Applicazione dei for range. Conversione di string a []rune. Esercizi. [TWG8]
- Ricorsione. Stack di esecuzione. [TWG6]
- Esercizi sulla ricorsione.
- Grafica con il pacchetto github.com/holizz/terrapin. Esempio semplice. Frattali e curva di Koch.
- Pacchetti e struttura. Visibilità. Documentare un pacchetto. Metodi. [TWG9 (cenni)]
- Interfacce (cenni). Esempi: Stringer, Reader, Writer. [TWG10, TWG11]
- Conversione di tipi, switch su tipi, argomenti variadici. [TWG11, TWG6]
- Tipi funzione e chiusure (cenni). Esempi dalle librerie (ordinamento, shuffling, ricerca in stringhe). L'esempio dell'integrazione numerica (metodo Monte-Carlo). [TWG6]
- I/O avanzato. File, istruzioni panic e defer. [TWG6, TWG12, TWG13]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing.
- Esempio: un pacchetto per le liste concatenate semplici di stringhe.
- Testing unitario e funzionale. (E2E) [TWG13]
- Il linguaggio C. Il gcc. Differenze sintattiche: punto-e-virgola, parentesi nelle strutture di controllo, dichiarazioni di variabili, tipi e funzioni. Differenze nelle strutture di controllo del flusso (switch, while, do-while). Uso di istruzioni semplici nelle strutture di controllo. Inclusione vs. importazione.
- Assenza di stringhe, slice, mappe. Uso dei char[] per le stringhe. Tipi elementari e dipendenza dal compilatore; uso di tipi specifici (stdint.h, bool.h). Cast impliciti. Definizione di macro. Funzioni di libreria. Parametri da riga di comando.
- Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free.
Prerequisiti
Nessuno
Metodi didattici
Lezioni frontali + laboratori didattici. La frequenza non è obbligatoria ma è fortemente consigliata.
Materiale di riferimento
- Ivo Balbaert: Programmare in go. Pearson, ISBN 8891909661.
- Alan A. Donovan, Brian W. Kernighan: The Go Programming Language, Addison-Wesley.
- http://vigna.di.unimi.it/prog/
- Alan A. Donovan, Brian W. Kernighan: The Go Programming Language, Addison-Wesley.
- http://vigna.di.unimi.it/prog/
Modalità di verifica dell’apprendimento e criteri di valutazione
Struttura degli appelli: ogni appello prevede
- una prova di programmazione individuale in laboratorio; la prova contiene un esercizio di filtro: gli studenti che non superino il filtro non saranno ulteriormente valutati;
- una esame orale per chi ha superato la prova di programmazione.
Le due parti che costituiscono l'esame devono essere effettuate nella stessa sessione.
- una prova di programmazione individuale in laboratorio; la prova contiene un esercizio di filtro: gli studenti che non superino il filtro non saranno ulteriormente valutati;
- una esame orale per chi ha superato la prova di programmazione.
Le due parti che costituiscono l'esame devono essere effettuate nella stessa sessione.
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Docente:
Bressan Marco
Turni:
Turno A
Docente:
Bressan Marco
Teoria
INF/01 - INFORMATICA - CFU: 9
Lezioni: 72 ore
Docente:
Vigna Sebastiano
Docente/i