Programmazione

A.A. 2019/2020
12
Crediti massimi
120
Ore totali
SSD
INF/01
Lingua
Italiano
Obiettivi formativi
Obiettivo dell'insegnamento e' introdurre gli studenti alla programmazione imperativa strutturata e al problem solving in piccolo
Risultati apprendimento attesi
Lo studente dovrà aver acquisito la capacità 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 nonché stabilire le cause di un malfunzionamento ed essere in grado di intervenire per correggerlo
Corso singolo

Questo insegnamento non può essere seguito come corso singolo. Puoi trovare gli insegnamenti disponibili consultando il catalogo corsi singoli.

Programma e organizzazione didattica

Edizione 1 (cognomi da A a De)

Responsabile
Periodo
Primo semestre

Programma
SYLLABUS DI MASSIMA
[TWG=The Way to Go: A Thorough Introduction to the Go Programming Language by Ivo Balbaert]


- Introduzione al corso; 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, 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]
- Esercizi con i cicli semplici. Istruzioni break e continue [TWG5]
- Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Tipi interi a lunghezza fissa [Dispense, TWG4]
- Esercizi con i cicli annidati.
- Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). Cenni al tipo complex. I caratteri (ASCII, Unicode, UTF-8). Tipo rune [Dispense, TWG4, TWG5]
- Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range).
- Selezione multiaria (switch) [TWG5]
- Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
- 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 pseudo-casuali. 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 [TWG9 (cenni)]
- Esempio: un pacchetto per le liste concatenate semplici di stringhe
- Argomenti avanzati: metodi e interfacce (cenni) [TWG10, TWG11]
- I/O avanzato. File, istruzione defer [TWG6, TWG12]
- Esercitazione: lettura di un file di testo con formato prestabilito, espressioni regolari, gestione degli errori di I/O e di parsing...
- Testing unitario e funzionale (E2E) [TWG13]
- Tipi funzione. L'esempio dell'integrazione numerica (metodo dei trapezoidi e metodo Monte-Carlo) [TWG6]
- 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
Materiale di riferimento
- The Way to Go: A Thorough Introduction to the Go Programming Language. Ivo Balbaert
- The Go Programming Language. Donovan, Kernighan
- http://boldi.di.unimi.it/Corsi/Inf2019/
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 prova scritta;
a chi supera entrambe le prove viene proposto un voto (ottenuto come media dei voti delle due prove); gli studenti con voto proposto compreso fra 21 e 27, possono decidere se verbalizzare il voto proposto o rifiutarlo, sostenendo di nuovo l'esame in uno degli appelli successivi; gli studenti con voto proposto inferiore a 21 devono sostenere un esame orale per verificare le loro effettive competenze; gli studenti con voto superiore a 27 possono verbalizzare il voto proposto oppure sostenere un esame orale (finalizzato a migliorare il voto). Resta inteso che sostenendo l'orale lo studente può terminare con un voto superiore, uguale o inferiore a quello inizialmente proposto, oppure può addirittura essere considerato insufficiente.
Le varie parti da cui l'esame è composto vanno necessariamente sostenute nello stesso appello.
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Turni:
Turno A (cognomi da A a Cao)
Docente: Morpurgo Anna Chiara Giovanna
Turno B (cognomi da Cap a De)
Docente: Trentini Andrea Mario

Teoria
INF/01 - INFORMATICA - CFU: 9
Lezioni: 72 ore
Docente: Boldi Paolo
Turni:
Lettere A-E
Docente: Boldi Paolo

Edizione 2 (cognomi da Di a Op)

Periodo
Primo semestre

Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F3X-36](https://www.unimi.it/it/ugov/of/af20200000f3x-36)
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Docente: Casazza Marco
Turni:
Turno C (cognomi da Di a Loc)
Docente: Casazza Marco
Turno D (cognomi da Lod a Op)
Docente: Casazza Marco

Teoria
INF/01 - INFORMATICA - CFU: 9
Lezioni: 72 ore
Turni:
Lettere F-M
Docente: Vigna Sebastiano

Edizione 3 (cognomi da Oq a Z)

Periodo
Primo semestre

Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F9X-31](https://www.unimi.it/it/ugov/of/af20200000f9x-31)
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Docente: Capra Lorenzo
Turni:
Turno E (cognomi da Oq a Sa)
Docente: Capra Lorenzo
Turno F (cognomi da Sb a Z)
Docente: Capra Lorenzo

Teoria
INF/01 - INFORMATICA - CFU: 9
Lezioni: 72 ore
Docente: Ceselli Alberto
Turni:
Lettere N-Z
Docente: Ceselli Alberto

Docente/i
Ricevimento:
Su appuntamento
via Celoria 18 (V piano)
Ricevimento:
mer-ven h 14.30
stanza 5052
Ricevimento:
Su appuntamento tramite email
Dipartimento di Informatica - Via Celoria 18 - Stanza 3015
Ricevimento:
tutti i giorni su appuntamento
ufficio 5003 via Celoria 18
Ricevimento:
su appuntamento, chiedere via mail (meglio quella @atrent)
stanza 4007, via Celoria 18, MI