Programmazione
A.A. 2019/2020
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 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)
Periodo
Primo semestre
Programma
Il programma è condiviso con i seguenti insegnamenti:
- [F1X-56](https://www.unimi.it/it/ugov/of/af20200000f1x-56)
- [F1X-56](https://www.unimi.it/it/ugov/of/af20200000f1x-56)
Moduli o unità didattiche
Laboratorio
INF/01 - INFORMATICA - CFU: 3
Laboratori: 48 ore
Docente:
Morpurgo Anna Chiara Giovanna
Turni:
Turno A (cognomi da A a Cao)
Docente:
Morpurgo Anna Chiara GiovannaTurno 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 PaoloEdizione 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
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
- 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
Docenti:
Bianchessi Nicola, Casazza Marco
Turni:
Turno C (cognomi da Di a Loc)
Docente:
Casazza MarcoTurno D (cognomi da Lod a Op)
Docente:
Bianchessi Nicola
Teoria
INF/01 - INFORMATICA - CFU: 9
Lezioni: 72 ore
Docente:
Vigna Sebastiano
Turni:
Lettere F-M
Docente:
Vigna SebastianoEdizione 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)
- [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 LorenzoTurno 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 AlbertoDocente/i
Ricevimento:
Giovedì, 11:00-13:00 e 14:00-15:00 - Su appuntamento (da concordare via email)
Stanza 3021 - Via Celoria, 18
Ricevimento:
Su appuntamento tramite email
Dipartimento di Informatica - Via Celoria 18 - Stanza 3015
Ricevimento:
tutti i giorni su appuntamento
ufficio 5003 via Celoria 18