Programmazione

A.A. 2019/2020
Insegnamento per
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
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

Struttura insegnamento e programma

Edizione 1 (cognomi da A a De)
Edizione attiva
Responsabile
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

STUDENTI FREQUENTANTI
Informazioni sul programma
Il corso di Programmazione è un corso di 12 crediti finalizzato all'insegnamento della programmazione. Trattandosi di un corso di base, non richiede alcuna conoscenza specifica pregressa; obiettivo del corso è formare gli studenti alla programmazione in senso imperativo; il linguaggio insegnato nel corso sarà Go.
Il corso si compone di due moduli, svolti in parallelo: questa pagina descrive solo il modulo di Programmazione (teoria), mentre il Laboratorio di programmazione è tenuto da tre diversi docenti in parallelo, e ciascuno ha una sua propria pagina web, cui vi preghiamo di fare riferimento per informazioni.
Propedeuticità
-
Prerequisiti e modalità di esame
-
Metodi didattici
Lezioni frontali + laboratori didattici
Teoria
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
Metodi didattici
Lezioni frontali + laboratori didattici
Materiale didattico e bibliografia
- The Way to Go: A Thorough Introduction to the Go Programming Language. Ivo Balbaert
- The Go Programming Language. Donovan, Kernighan
Laboratorio
Programma
esercizi legati al programma teorico
Metodi didattici
proposta esercizi, lavoro individuale degli studenti, correzione collegiale

utilizzo editor collaborativo
Materiale didattico e bibliografia
STUDENTI NON FREQUENTANTI
Prerequisiti e modalità di esame
-
Teoria
Programma
-
Materiale didattico e bibliografia
-
Laboratorio
Programma
seguire wiki
Materiale didattico e bibliografia
idem
Periodo
Primo semestre
Edizione 2 (cognomi da Di a Op)
Edizione attiva
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

Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F3X-36](https://www.unimi.it/it/ugov/of/af20200000f3x-36)
Periodo
Primo semestre
Edizione 3 (cognomi da Oq a Z)
Edizione attiva
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

Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F9X-31](https://www.unimi.it/it/ugov/of/af20200000f9x-31)
Periodo
Primo semestre
Periodo
Primo semestre
Modalità di valutazione
Esame
Giudizio di valutazione
voto verbalizzato in trentesimi
Siti didattici
Docente/i
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
Ricevimento:
martedì ore 14.30-17.30 (previo scambio mail)
stanza 4007 via Celoria 18 o via confcall (jitsi, telegram, etc.)
Ricevimento:
Ricevimento su appuntamento per email
Stanza 5014, Dipartimento di Informatica