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 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
Programma e organizzazione didattica

Edizione 1 (cognomi da A a De)

Periodo
Primo semestre
Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F1X-56](https://www.unimi.it/it/ugov/of/af20200000f1x-56)
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: Morpurgo Anna Chiara Giovanna

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)

Responsabile
Periodo
Primo semestre
Programma
[TWG=The Way to Go: A Thorough Introduction to the Go Programming Language by Ivo Balbaert]
1. Introduzione al corso; Architettura del calcolatore; Che cos'è; l'informatica; Linguaggi di programmazione (macchina, assembly, alto livello); Il calcolatore come macchina programmabile
2. 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
3. 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]
4. Discussione degli aspetti lessicali e sintattici. Commenti [TWG4]. Tipi. Classificazione dei tipi (tipi di base, tipi composti, interfacce). Variabili: nome, tipo, valore, scope. Dichiarazione, assegnamenti e assegnamenti multipli, short-assignment [TWG4]
5. I/O di base. Tipi di base numerici (int, float64). Espressioni numeriche. Conversioni. Cenni al tipo complex. Variabili inutilizzate e blank variable [TWG4]
6. Selezione binaria (if). Variabili locali all'if. Il tipo bool e gli operatori booleani. Esercizi [TWG5]
7. Il ciclo (for): versione unaria, ternaria, zeraria. Esercizi [TWG5]
8. Rappresentazione dell'informazione. Notazione posizionale. Rappresentazione degli interi negativi. Range di rappresentazione, overflow. Cenni alla rappresentazione dei reali: virgola fissa e mobile (standard IEEE 754). I caratteri (ASCII, Unicode, UTF-8) [Dispense]
9. Tipi di base numerici a lunghezza fissa. Tipo rune. Tipo string: differenze fra raw e utf-8. Funzione len. Quarta forma del ciclo for (range) [TWG4, TWG5]
10. Esercizi: cicli annidati. Istruzioni break e continue [TWG5]
11. Selezione multiaria (switch) [TWG5]
12. Array e slice. Inizializzatori. Applicazione dei for range. Funzione append [TWG7]
13. Esercizi. Argomenti da riga di comando. Pacchetto strconv
14. Funzioni: parametri, segnatura argomenti. Passaggio per valore. Valori restituiti. Valori restituiti con nome. [TWG6]
15. Esercizi
16. Ordinamento e ricerca dicotomica
17. Generazione numeri pseudo-casuali. Pacchetto math. Esercizi
18. Mappe. Applicazione dei for range. Esercizi [TWG8]
19. Ricorsione. Stack di esecuzione [TWG6]
20. Esercizi sulla ricorsione
21. Puntatori: operatori * e &. [TWG4]
22. Esercizi con passaggi di riferimenti
23. Strutture [TWG10]. Metodi [TWG10] (cenni)
24. Esercizi su strutture e metodi
25. Chiusure. Esempio: sort, ricerca binaria
26. I/O avanzato. File [TWG12]
27. Esercizi. Istruzione defer [TWG6]
28. Pacchetti e struttura. Visibilità delle variabili
29. Testing [TWG13]
30. Interfacce [TWG11]
31. Realizzazione di un motore di ricerca (indici inversi)
32. Go routine e canali [TWG14]
33. Esercizi sulla concorrenza
34. 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.
35. 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
36. Puntatori, aritmetica dei puntatori. Gestione della memoria: malloc, free
Prerequisiti
Nessuno.
Metodi didattici
Lezioni frontali + laboratorio di programmazione.
Materiale di riferimento
- The Way to Go: A Thorough Introduction to the Go Programming Language. Ivo Balbaert
- The Go Programming Language. Donovan, Kernighan
Modalità di verifica dell’apprendimento e criteri di valutazione
Viene effettuata una prova di laboratorio (risoluzione in Go di semplici problemi di programmazione), seguita da uno scritto (esempi sono reperibili sul sito del docente). Opzionalmente, dopo lo scritto è possibile effettuare un esame orale.
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Turni:
Turno C (cognomi da Di a Loc)
Docente: Casazza Marco
Turno D (cognomi da Lod a Op)
Docente: Bianchessi Nicola

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
Stanza 3018 - Via Celoria, 18
Ricevimento:
Su appuntamento
Stanza 5019, Piano 5, via Celoria 18
Ricevimento:
mer-ven h 14.30
stanza 5052
Ricevimento:
Su appuntamento
Ufficio 3018, via Celoria 18
Ricevimento:
Su appuntamento tramite email
Dipartimento di Informatica - Via Celoria 18 - Stanza 3015
Ricevimento:
tutti i giorni su appuntamento
stanza 5003 via Celoria 18