Informatica
A.A. 2019/2020
Obiettivi formativi
L'insegnamento si propone di introdurre le basi dell'Informatica, con particolare riferimento alla Programmazione. Vengono presentati i rudimenti sulla rappresentazione digitale dell'informazione e sull'architettura dei calcolatori. Viene introdotto il concetto di algoritmo e di programma, unitamente ai principali strumenti coinvolti nel ciclo di vita del software. Viene introdotta la programmazione strutturata ed il paradigma imperativo, ponendo l'accento sulla modularizzazione del software. Vengono introdotte alcune strutture dati ed algoritmi notevoli, accennando alla valutazione della complessità in tempo algoritmica. Viene accennato il paradigma della programmazione ad oggetti.
Risultati apprendimento attesi
Lo studente sarà in grado di:
1) Affrontare problemi tipicamente rivolti all'analisi dei dati, progettando concettualmente algoritmi di soluzione.
2) Implementare tali algoritmi mediante codice modulare scegliendo strutture dati appropriate e costrutti offerti dal linguaggio di programmazione scelto.
3) Utilizzare oggetti da opportune librerie per fornire rappresentazioni grafiche dei dati in output.
4) Muoversi all'interno di un sistema operativo allo scopo di codificare, compilare, linkare ed eseguire programmi.
1) Affrontare problemi tipicamente rivolti all'analisi dei dati, progettando concettualmente algoritmi di soluzione.
2) Implementare tali algoritmi mediante codice modulare scegliendo strutture dati appropriate e costrutti offerti dal linguaggio di programmazione scelto.
3) Utilizzare oggetti da opportune librerie per fornire rappresentazioni grafiche dei dati in output.
4) Muoversi all'interno di un sistema operativo allo scopo di codificare, compilare, linkare ed eseguire programmi.
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
CORSO A
Responsabile
Periodo
Primo semestre
Programma
Programma delle lezioni di teoria
- Cos'è l'informatica: mezzi fisici e teorici per l'elaborazione dell'informazione
- Il concetto di algoritmo, esempi: algoritmo di Euclide, semplici algoritmi numerici
- Dagli algoritmi ai programmi: esecutori e linguaggi di programmazione
- L'informazione e la sua rappresentazione numerica (testi, suoni, immagini), digitalizzazione dell'informazione
- Sistemi numerici in diverse basi, la base ottale, esadecimale, binaria (digitalizzazione)
- Rappresentazione dei numeri in binario
- Rappresentazione dei numeri negativi in modulo e segno e in complemento a 2
- Rappresentazione floating point dei razionali, mantissa, esponente, errori di troncamento
- Misure di informazione: bit, byte, multipli
- Architettura dei sistemi di calcolo, macchina di Von Neumann
- CPU, RAM, BUS, periferiche, principali funzionalità e caratteristiche
- Linguaggio macchina e assembly, programmazione a basso livello, svantaggi
- Programmazione ad alto livello, linguaggi e compilatori
- Ciclo di vita del software: progettazione, compilazione, linking, loading, esecuzione
- Possibili errori e debugging
- Programmazione strutturata e Teorema di Boehm-Jacopini. Le strutture di controllo
- Forme di selezione, esempi
- Le variabili, tipi e operazioni
- Forme di iterazione, esempi: gestione di stream di dati e test numerici
- Il primo programma C++. Lo stream di output cout
- I tipi in C++, principali caratteristiche e operazioni. Tipi interi, con virgola, caratteri e bool
- Dichiarazioni di variabili, loro riempimento mediante espressioni e operazioni di input. Lo stream cin
- Il tipo string. Le C-stringhe, loro struttura, gestione e principali funzionalità
- Le strutture di controllo in C++. La selezione, varie forme e if nidificati
- Il tipo bool per le condizioni, principali caratteristiche e operatori booleani. L'operatore condizionale
- Iterazione in C++, possibili forme. Il ciclo for. L'istruzione break
- Gli array monodimensionali in C++, principali caratteristiche, funzionalità e operazioni su array
- Array e allocazione in memoria, indirizzo d'inizio array. Array bidimensionali, esempi di utilizzo
- Il concetto di struct
- Gestione dei file in C++. Principali funzionalità della libreria fstream. Apertura, manipolazione e chiusura di stream su file
- Manipolatori di output, la libreria iomanip
- Gli array dinamici, caratteristiche, definizione e uso. Caricamento dati da file ad array dinamici
- Funzioni in C++. Sviluppo modulare top-down dei programmi. Forma di una function che restituisce valori e void
- Passaggio di parametri, per valore e riferimento, significato. Forma modulare del sorgente e prototipi
- Gestione della memoria, record di attivazione, stack, heap, errori di stack overflow
- Funzioni C++ ricorsive, definizioni induttive di funzioni, loro implementazione mediante ricorsione
- Dinamica dello stack durante la ricorsione. Prestazioni iterativo vs. ricorsivo
- Cenni alla complessità worst case degli algoritmi
- Ricerca in un array. Soluzione lineare e binaria, implementazioni e analisi delle prestazioni
- Il problema di sorting, limiti inferiori alla complessità in tempo. Selection sort, implementazione e complessità in tempo quadratica
- Mergesort, specifica e implentazione
- Valutazione della complessità in tempo di mergesort mediante equazione di ricorrenza, tempo ottimale
- I puntatori, significato, definizione ed utilizzo. Puntatori a strutture ed oggetti
- Variabili dinamiche e puntatori, array dinamici, istruzione new. Memory leak e istruzione delete
- Operazioni sui puntatori, aritmetica dei puntatori. Utilitzzo dei puntatori per scorrere array, copia superficiale e profonda di array
- Array tradizionali come puntatori costanti, differenza con array dinamici. Array restituiti da funzioni, array su stack e su heap
- I parametri del main, acquisizione a linea di comando. Implementazioni di semplici comandi di sistema operativo
Programma delle esercitazioni di laboratorio
- I sistemi operativi, Linux e il file system
- L'utilizzo del terminale Linux, principali comandi
- L'ambiente di programmazione, editor, compilatori
- Primi programmi in C++
- Selezione e cicli in C++
- Array e struct
- Funzioni C++ e passaggio di parametri
- Creazione di librerie di funzioni. Implementazione librerie, file header
- Creazione file oggetto e loro linking
- Utilizzo del comando make e struttura di un makefile
- Uso di file in C++
- Utilizzo della libreria RooT per l'elaborazione grafica di dati, cenni all'uso degli oggetti in C++
- Le principali classi di RooT: scatterPlot, istogrammi, funzioni, finestre
- Sviluppo di progetti di analisi e visualizzazione finale di dati mediante RooT
- Cos'è l'informatica: mezzi fisici e teorici per l'elaborazione dell'informazione
- Il concetto di algoritmo, esempi: algoritmo di Euclide, semplici algoritmi numerici
- Dagli algoritmi ai programmi: esecutori e linguaggi di programmazione
- L'informazione e la sua rappresentazione numerica (testi, suoni, immagini), digitalizzazione dell'informazione
- Sistemi numerici in diverse basi, la base ottale, esadecimale, binaria (digitalizzazione)
- Rappresentazione dei numeri in binario
- Rappresentazione dei numeri negativi in modulo e segno e in complemento a 2
- Rappresentazione floating point dei razionali, mantissa, esponente, errori di troncamento
- Misure di informazione: bit, byte, multipli
- Architettura dei sistemi di calcolo, macchina di Von Neumann
- CPU, RAM, BUS, periferiche, principali funzionalità e caratteristiche
- Linguaggio macchina e assembly, programmazione a basso livello, svantaggi
- Programmazione ad alto livello, linguaggi e compilatori
- Ciclo di vita del software: progettazione, compilazione, linking, loading, esecuzione
- Possibili errori e debugging
- Programmazione strutturata e Teorema di Boehm-Jacopini. Le strutture di controllo
- Forme di selezione, esempi
- Le variabili, tipi e operazioni
- Forme di iterazione, esempi: gestione di stream di dati e test numerici
- Il primo programma C++. Lo stream di output cout
- I tipi in C++, principali caratteristiche e operazioni. Tipi interi, con virgola, caratteri e bool
- Dichiarazioni di variabili, loro riempimento mediante espressioni e operazioni di input. Lo stream cin
- Il tipo string. Le C-stringhe, loro struttura, gestione e principali funzionalità
- Le strutture di controllo in C++. La selezione, varie forme e if nidificati
- Il tipo bool per le condizioni, principali caratteristiche e operatori booleani. L'operatore condizionale
- Iterazione in C++, possibili forme. Il ciclo for. L'istruzione break
- Gli array monodimensionali in C++, principali caratteristiche, funzionalità e operazioni su array
- Array e allocazione in memoria, indirizzo d'inizio array. Array bidimensionali, esempi di utilizzo
- Il concetto di struct
- Gestione dei file in C++. Principali funzionalità della libreria fstream. Apertura, manipolazione e chiusura di stream su file
- Manipolatori di output, la libreria iomanip
- Gli array dinamici, caratteristiche, definizione e uso. Caricamento dati da file ad array dinamici
- Funzioni in C++. Sviluppo modulare top-down dei programmi. Forma di una function che restituisce valori e void
- Passaggio di parametri, per valore e riferimento, significato. Forma modulare del sorgente e prototipi
- Gestione della memoria, record di attivazione, stack, heap, errori di stack overflow
- Funzioni C++ ricorsive, definizioni induttive di funzioni, loro implementazione mediante ricorsione
- Dinamica dello stack durante la ricorsione. Prestazioni iterativo vs. ricorsivo
- Cenni alla complessità worst case degli algoritmi
- Ricerca in un array. Soluzione lineare e binaria, implementazioni e analisi delle prestazioni
- Il problema di sorting, limiti inferiori alla complessità in tempo. Selection sort, implementazione e complessità in tempo quadratica
- Mergesort, specifica e implentazione
- Valutazione della complessità in tempo di mergesort mediante equazione di ricorrenza, tempo ottimale
- I puntatori, significato, definizione ed utilizzo. Puntatori a strutture ed oggetti
- Variabili dinamiche e puntatori, array dinamici, istruzione new. Memory leak e istruzione delete
- Operazioni sui puntatori, aritmetica dei puntatori. Utilitzzo dei puntatori per scorrere array, copia superficiale e profonda di array
- Array tradizionali come puntatori costanti, differenza con array dinamici. Array restituiti da funzioni, array su stack e su heap
- I parametri del main, acquisizione a linea di comando. Implementazioni di semplici comandi di sistema operativo
Programma delle esercitazioni di laboratorio
- I sistemi operativi, Linux e il file system
- L'utilizzo del terminale Linux, principali comandi
- L'ambiente di programmazione, editor, compilatori
- Primi programmi in C++
- Selezione e cicli in C++
- Array e struct
- Funzioni C++ e passaggio di parametri
- Creazione di librerie di funzioni. Implementazione librerie, file header
- Creazione file oggetto e loro linking
- Utilizzo del comando make e struttura di un makefile
- Uso di file in C++
- Utilizzo della libreria RooT per l'elaborazione grafica di dati, cenni all'uso degli oggetti in C++
- Le principali classi di RooT: scatterPlot, istogrammi, funzioni, finestre
- Sviluppo di progetti di analisi e visualizzazione finale di dati mediante RooT
Prerequisiti
Nessun particolare prerequisito richiesto.
Metodi didattici
L'insegnamento si compone di lezioni frontali di teoria ed esercitazioni in laboratorio:
-Le lezioni frontali di teoria presentano le basi della programmazione e del progetto di algoritmi. Viene inoltre proposto un linguaggio di programmazione, illustrandone sintassi, semantica e proponendo tecniche di programmazione ed algoritmi notevoli. Durante tali lezioni vengono proposti e discussi esercizi e problemi, stimolando il lavoro in piccoli gruppi e confrontando le diverse soluzioni proposte.
- Le lezioni di laboratorio hanno lo scopo anzitutto di presentare le funzionalità base di un sistema operativo e alcuni strumenti tipici dell'attività di programmazione (editor, compilatori, ...). Durante tali lezioni vengono proposti esercizi di programmazione e progetti di difficoltà crescente. Implementazioni concrete di tali progetti vengono discusse e rese disponibili sul sito del corso.
-Le lezioni frontali di teoria presentano le basi della programmazione e del progetto di algoritmi. Viene inoltre proposto un linguaggio di programmazione, illustrandone sintassi, semantica e proponendo tecniche di programmazione ed algoritmi notevoli. Durante tali lezioni vengono proposti e discussi esercizi e problemi, stimolando il lavoro in piccoli gruppi e confrontando le diverse soluzioni proposte.
- Le lezioni di laboratorio hanno lo scopo anzitutto di presentare le funzionalità base di un sistema operativo e alcuni strumenti tipici dell'attività di programmazione (editor, compilatori, ...). Durante tali lezioni vengono proposti esercizi di programmazione e progetti di difficoltà crescente. Implementazioni concrete di tali progetti vengono discusse e rese disponibili sul sito del corso.
Materiale di riferimento
Testi:
- D.S. Malik: Programmazione in C++. Apogeo, 2013.
- L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill, 2008.
Entrambi i testi sono disponibili anche in inglese.
Siti web:
- ARIEL https://cmereghettii.ariel.ctu.unimi.it/v5/home/Default.aspx
- PERSONALE http://mereghetti.di.unimi.it/inf/
- GENERALE http://www.l30-informatica.fisica.unimi.it/
- D.S. Malik: Programmazione in C++. Apogeo, 2013.
- L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill, 2008.
Entrambi i testi sono disponibili anche in inglese.
Siti web:
- ARIEL https://cmereghettii.ariel.ctu.unimi.it/v5/home/Default.aspx
- PERSONALE http://mereghetti.di.unimi.it/inf/
- GENERALE http://www.l30-informatica.fisica.unimi.it/
Modalità di verifica dell’apprendimento e criteri di valutazione
L'esame consta di una prova scritta ed una prova di laboratorio:
- Nella prova scritta vengono proposti alcuni esercizi di programmazione atti in particolar modo a verificare la conoscenza delle basi teoriche della programmazione e del progetto di semplici algoritmi. La prova scritta ha durata di due ore durante le quali non è consentita la consultazione di alcuna fonte. Nella valutazione di tale prova, espressa in trentesimi, viene considerata sia la capacità di progettare concettualmente algoritmi sia la correttezza formale della specifica di tali algoritmi nel linguaggio di programmazione considerato.
- Nella prova di laboratorio viene proposto un progetto di analisi dei dati relativamente complesso per il quale si richiede la scrittura di codice funzionante e ben strutturato. La prova di laboratorio ha durata di circa tre ore durante le quali gli studenti possono avvalersi del software sviluppato durante le esercitazioni di laboratorio. Nella valutazione di tale prova, espressa in trentesimi, viene valutata sia la capacità progettuale di algoritmi sia la capacità di scrivere codice modulare, ben strutturato e manutenibile.
Il voto finale, espresso in trentesimi, attribuito allo studente per l'insegnamento in questione origina da un'opportuna media delle prove scritta e di laboratorio.
- Nella prova scritta vengono proposti alcuni esercizi di programmazione atti in particolar modo a verificare la conoscenza delle basi teoriche della programmazione e del progetto di semplici algoritmi. La prova scritta ha durata di due ore durante le quali non è consentita la consultazione di alcuna fonte. Nella valutazione di tale prova, espressa in trentesimi, viene considerata sia la capacità di progettare concettualmente algoritmi sia la correttezza formale della specifica di tali algoritmi nel linguaggio di programmazione considerato.
- Nella prova di laboratorio viene proposto un progetto di analisi dei dati relativamente complesso per il quale si richiede la scrittura di codice funzionante e ben strutturato. La prova di laboratorio ha durata di circa tre ore durante le quali gli studenti possono avvalersi del software sviluppato durante le esercitazioni di laboratorio. Nella valutazione di tale prova, espressa in trentesimi, viene valutata sia la capacità progettuale di algoritmi sia la capacità di scrivere codice modulare, ben strutturato e manutenibile.
Il voto finale, espresso in trentesimi, attribuito allo studente per l'insegnamento in questione origina da un'opportuna media delle prove scritta e di laboratorio.
INF/01 - INFORMATICA - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Lezioni: 24 ore
Docente:
Mereghetti Carlo
Turni:
-
Docente:
Mereghetti CarloTurno 1
Docente:
Mereghetti CarloTurno 2
Docente:
Mereghetti CarloCORSO B
Responsabile
Periodo
Primo semestre
Programma
Programma delle lezioni di teoria
1. Cos'è l'informatica: mezzi fisici e teorici per l'elaborazione dell'informazione
2. Il concetto di algoritmo, esempi: algoritmo di Euclide, semplici algoritmi numerici
3. Dagli algoritmi ai programmi: esecutori e linguaggi di programmazione
4. L'informazione e la sua rappresentazione numerica (testi, suoni, immagini), digitalizzazione dell'informazione
5. Sistemi numerici in diverse basi: esadecimale, binaria (digitalizzazione)
6. Rappresentazione dei numeri in binario.
7. Overflow.
8. Rappresentazione floating point dei razionali, mantissa, esponente, errori di troncamento
9. Misure di informazione: bit, byte, parole, multipli
10. Architettura dei sistemi di calcolo, macchina di Von Neumann
11. CPU, RAM, BUS, periferiche, principali funzionalità e caratteristiche
12. Linguaggio macchina e assembly, programmazione a basso livello, svantaggi
13. Programmazione ad alto livello, linguaggi e compilatori
14. Ciclo di vita del software: progettazione, compilazione, linking, loading, esecuzione. Possibili errori e debugging
15. Programmazione strutturata e Teorema di Boehm-Jacopini. Le strutture di controllo
16. Forme di selezione, esempi
17. Le variabili, tipi e operazioni
18. Forme di iterazione, esempi: gestione di stream di dati e test numerici
19. Il primo programma C++. Lo stream di output cout
20. I tipi in C++, principali caratteristiche e operazioni. Tipi interi, con virgola, caratteri e bool
21. Dichiarazioni di variabili, loro riempimento mediante espressioni e operazioni di input. Lo stream cin
22. Il tipo string. Le C-stringhe, loro struttura, gestione e principali funzionalità
23. Le strutture di controllo in C++. La selezione, varie forme e if nidificati
24. Il tipo bool per le condizioni, principali caratteristiche e operatori booleani. L'operatore condizionale.
25. Iterazione in C++, possibili forme. Il ciclo for. L'istruzione break
26. Gli array monodimensionali in C++, principali caratteristiche, funzionalità e operazioni su array
27. Array e allocazione in memoria, indirizzo d'inizio array. Array bidimensionali, esempi di utilizzo
28. Il concetto di struct
29. Gestione dei file in C++. Principali funzionalità della libreria fstream. Apertura, manipolazione e chiusura di stream su file
30. Manipolatori di output, la libreria iomanip
31. Gli array dinamici, caratteristiche, definizione e uso. Caricamento dati da file ad array dinamici
32. Funzioni in C++. Sviluppo modulare top-down dei programmi. Forma di una function che restituisce valori e void
33. Passaggio di parametri, per valore e riferimento, significato. Forma modulare del sorgente e prototipi
34. Gestione della memoria, record di attivazione, stack, heap, errori di stack overflow
35. Funzioni C++ ricorsive, definizioni induttive di funzioni, loro implementazione mediante ricorsione
36. Dinamica dello stack durante la ricorsione. Prestazioni iterativo vs. ricorsivo
37. Cenni alla complessità worst case degli algoritmi
38. Ricerca in un array. Soluzione lineare e binaria, implementazioni e analisi delle prestazioni
39. Il problema di sorting, limiti inferiori alla complessità in tempo. Selection sort, implementazione e complessità in tempo quadratica
40. Mergesort, specifica e implentazione.Valutazione della complessità in tempo di mergesort mediante equazione di ricorrenza, tempo ottimale
41. I puntatori, significato, definizione ed utilizzo. Puntatori a strutture ed oggetti
42. Variabili dinamiche e puntatori, array dinamici, istruzione new. Memory leak e istruzione delete
43. Operazioni sui puntatori, aritmetica dei puntatori. Utilitzzo dei puntatori per scorrere array, copia superficiale e profonda di array
44. Array tradizionali come puntatori costanti, differenza con array dinamici. Array restituiti da funzioni, array su stack e su heap
45. I parametri del main, acquisizione a linea di comando. Implementazioni di semplici comandi di sistema operativo
Programma delle esercitazioni di laboratorio
1. I sistemi operativi, Linux e il file system
2. L'utilizzo del terminale Linux, principali comandi
3. L'ambiente di programmazione, editor, compilatori
4. Primi programmi in C++
5. Selezione e cicli in C++
6. Array e struct
7. Funzioni C++ e passaggio di parametri
8. Creazione di librerie di funzioni. Implementazione librerie, file header.
9. Creazione file oggetto e loro linking
10. Utilizzo del comando make e struttura di un makefile
11. Uso di file in C++
12. Utilizzo della libreria RooT per l'elaborazione grafica di dati, cenni all'uso degli oggetti in C++
13. Le principali classi di RooT: scatterPlot, istogrammi, funzioni, finestre
14. Sviluppo di progetti di analisi e visualizzazione finale di dati mediante RooT
1. Cos'è l'informatica: mezzi fisici e teorici per l'elaborazione dell'informazione
2. Il concetto di algoritmo, esempi: algoritmo di Euclide, semplici algoritmi numerici
3. Dagli algoritmi ai programmi: esecutori e linguaggi di programmazione
4. L'informazione e la sua rappresentazione numerica (testi, suoni, immagini), digitalizzazione dell'informazione
5. Sistemi numerici in diverse basi: esadecimale, binaria (digitalizzazione)
6. Rappresentazione dei numeri in binario.
7. Overflow.
8. Rappresentazione floating point dei razionali, mantissa, esponente, errori di troncamento
9. Misure di informazione: bit, byte, parole, multipli
10. Architettura dei sistemi di calcolo, macchina di Von Neumann
11. CPU, RAM, BUS, periferiche, principali funzionalità e caratteristiche
12. Linguaggio macchina e assembly, programmazione a basso livello, svantaggi
13. Programmazione ad alto livello, linguaggi e compilatori
14. Ciclo di vita del software: progettazione, compilazione, linking, loading, esecuzione. Possibili errori e debugging
15. Programmazione strutturata e Teorema di Boehm-Jacopini. Le strutture di controllo
16. Forme di selezione, esempi
17. Le variabili, tipi e operazioni
18. Forme di iterazione, esempi: gestione di stream di dati e test numerici
19. Il primo programma C++. Lo stream di output cout
20. I tipi in C++, principali caratteristiche e operazioni. Tipi interi, con virgola, caratteri e bool
21. Dichiarazioni di variabili, loro riempimento mediante espressioni e operazioni di input. Lo stream cin
22. Il tipo string. Le C-stringhe, loro struttura, gestione e principali funzionalità
23. Le strutture di controllo in C++. La selezione, varie forme e if nidificati
24. Il tipo bool per le condizioni, principali caratteristiche e operatori booleani. L'operatore condizionale.
25. Iterazione in C++, possibili forme. Il ciclo for. L'istruzione break
26. Gli array monodimensionali in C++, principali caratteristiche, funzionalità e operazioni su array
27. Array e allocazione in memoria, indirizzo d'inizio array. Array bidimensionali, esempi di utilizzo
28. Il concetto di struct
29. Gestione dei file in C++. Principali funzionalità della libreria fstream. Apertura, manipolazione e chiusura di stream su file
30. Manipolatori di output, la libreria iomanip
31. Gli array dinamici, caratteristiche, definizione e uso. Caricamento dati da file ad array dinamici
32. Funzioni in C++. Sviluppo modulare top-down dei programmi. Forma di una function che restituisce valori e void
33. Passaggio di parametri, per valore e riferimento, significato. Forma modulare del sorgente e prototipi
34. Gestione della memoria, record di attivazione, stack, heap, errori di stack overflow
35. Funzioni C++ ricorsive, definizioni induttive di funzioni, loro implementazione mediante ricorsione
36. Dinamica dello stack durante la ricorsione. Prestazioni iterativo vs. ricorsivo
37. Cenni alla complessità worst case degli algoritmi
38. Ricerca in un array. Soluzione lineare e binaria, implementazioni e analisi delle prestazioni
39. Il problema di sorting, limiti inferiori alla complessità in tempo. Selection sort, implementazione e complessità in tempo quadratica
40. Mergesort, specifica e implentazione.Valutazione della complessità in tempo di mergesort mediante equazione di ricorrenza, tempo ottimale
41. I puntatori, significato, definizione ed utilizzo. Puntatori a strutture ed oggetti
42. Variabili dinamiche e puntatori, array dinamici, istruzione new. Memory leak e istruzione delete
43. Operazioni sui puntatori, aritmetica dei puntatori. Utilitzzo dei puntatori per scorrere array, copia superficiale e profonda di array
44. Array tradizionali come puntatori costanti, differenza con array dinamici. Array restituiti da funzioni, array su stack e su heap
45. I parametri del main, acquisizione a linea di comando. Implementazioni di semplici comandi di sistema operativo
Programma delle esercitazioni di laboratorio
1. I sistemi operativi, Linux e il file system
2. L'utilizzo del terminale Linux, principali comandi
3. L'ambiente di programmazione, editor, compilatori
4. Primi programmi in C++
5. Selezione e cicli in C++
6. Array e struct
7. Funzioni C++ e passaggio di parametri
8. Creazione di librerie di funzioni. Implementazione librerie, file header.
9. Creazione file oggetto e loro linking
10. Utilizzo del comando make e struttura di un makefile
11. Uso di file in C++
12. Utilizzo della libreria RooT per l'elaborazione grafica di dati, cenni all'uso degli oggetti in C++
13. Le principali classi di RooT: scatterPlot, istogrammi, funzioni, finestre
14. Sviluppo di progetti di analisi e visualizzazione finale di dati mediante RooT
Prerequisiti
Nessuno
Metodi didattici
Lezioni teoria: frontale, 2 ore a settimana
Laboratorio:
-parte frontale (introduzione nuovi costrutti linguaggio, discussione e correzione esercizi assegnati): 1 ora a settimana
-parte pratica in laboratorio (esercizi assegnati): 2 ore a settimana.
Durante le sessioni di laboratorio gli studenti lavorano in modo autonomo assistiti da tutor e dal docente.
Laboratorio:
-parte frontale (introduzione nuovi costrutti linguaggio, discussione e correzione esercizi assegnati): 1 ora a settimana
-parte pratica in laboratorio (esercizi assegnati): 2 ore a settimana.
Durante le sessioni di laboratorio gli studenti lavorano in modo autonomo assistiti da tutor e dal docente.
Materiale di riferimento
D.S. Malik: Programmazione in C++. Apogeo, 2013.
L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill, 2008.
L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill, 2008.
Modalità di verifica dell’apprendimento e criteri di valutazione
La prova d'esame si compone di una prova scritta e di una prova di laboratorio. Ciascuna prova viene valutata indipendentemente e in caso di valutazione positiva (maggiore o uguale a 18) di entrambe le prove, i due voti concorrono a formare il voto finale, dato dalla media aritmetica dei due voti, arrotondata per eccesso all'intero successivo.
La prova scritta si svolge senza l'uso di testi e/o appunti e verte sulle regole concettuali fondamentali del C++ e sullo sviluppo sulla carta di
semplici algoritmi.
La prova di laboratorio prevede la messa a punto di algoritmi in C++ attinenti argomenti esplicitamente trattati nel corso e/o nei corsi svolti
in parallelo (analisi, meccanica e statistica), durante la prova lo studente può consultare materiale bibliografico e la cartella personale
che ha compilato durante le sessioni di laboratorio (e completato in modo autonomo).
La prova scritta si svolge senza l'uso di testi e/o appunti e verte sulle regole concettuali fondamentali del C++ e sullo sviluppo sulla carta di
semplici algoritmi.
La prova di laboratorio prevede la messa a punto di algoritmi in C++ attinenti argomenti esplicitamente trattati nel corso e/o nei corsi svolti
in parallelo (analisi, meccanica e statistica), durante la prova lo studente può consultare materiale bibliografico e la cartella personale
che ha compilato durante le sessioni di laboratorio (e completato in modo autonomo).
INF/01 - INFORMATICA - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Lezioni: 24 ore
Docente:
Tamascelli Dario
Turni:
-
Docente:
Tamascelli DarioTurno 1
Docente:
Tamascelli DarioTurno 2
Docente:
Tamascelli DarioCORSO C
Responsabile
Periodo
Primo semestre
Programma
Le lezioni trattano:
1) generalità sul calcolatore, sistemi operativi, compilatori ed interpreti;
2) i dati, la loro rappresentazione ed il calcolo approssimato;
3) fondamenti di programmazione procedurale, le strutture di controllo, le funzioni e la gestione dei file;
4) il linguaggio C++ con esercitazioni su algoritmi per la gestione di array e problemi di calcolo numerico;
L'attività di laboratorio consiste in:
1) presentazione della rete e di Linux ed attività di programmazione relativa agli argomenti svolti a lezione;
2) esperimenti di calcolo guidati dal docente (consistenti in stesura programmi per l'analisi statistica su dati dedotti da problemi fisici reali);
3) introduzione a prodotti specifici per la presentazione dei risultati anche con l'uso della grafica (ROOT).
1) generalità sul calcolatore, sistemi operativi, compilatori ed interpreti;
2) i dati, la loro rappresentazione ed il calcolo approssimato;
3) fondamenti di programmazione procedurale, le strutture di controllo, le funzioni e la gestione dei file;
4) il linguaggio C++ con esercitazioni su algoritmi per la gestione di array e problemi di calcolo numerico;
L'attività di laboratorio consiste in:
1) presentazione della rete e di Linux ed attività di programmazione relativa agli argomenti svolti a lezione;
2) esperimenti di calcolo guidati dal docente (consistenti in stesura programmi per l'analisi statistica su dati dedotti da problemi fisici reali);
3) introduzione a prodotti specifici per la presentazione dei risultati anche con l'uso della grafica (ROOT).
Prerequisiti
Nessuno.
Metodi didattici
Modalità di esame: Scritto e prova di laboratorio.
Modalità di frequenza: Fortemente consigliata.
Modalità di erogazione: Lezioni frontali e esercitazioni in laboratorio di informatica.
Modalità di frequenza: Fortemente consigliata.
Modalità di erogazione: Lezioni frontali e esercitazioni in laboratorio di informatica.
Materiale di riferimento
Libri di testo consigliati:
- D.S. Malik, Programmazione in C++, APOGEO
- L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill.
Sito del corso: http://www.l30-informatica.fisica.unimi.it/
- D.S. Malik, Programmazione in C++, APOGEO
- L.J. Aguilar: Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti. McGraw-Hill.
Sito del corso: http://www.l30-informatica.fisica.unimi.it/
Modalità di verifica dell’apprendimento e criteri di valutazione
Scritto e prova di laboratorio. La prova scritta si svolge senza l'uso di testi e/o appunti e verte sulle regole concettuali fondamentali del C++ e sullo sviluppo sulla carta di semplici algoritmi. La prova di laboratorio prevede la messa a punto di algoritmi in C++ attinenti argomenti esplicitamente trattati nel corso e/o nei corsi svolti in parallelo (analisi, meccanica e statistica), durante la prova lo studente può consultare materiale bibliografico e la cartella personale che ha compilato durante le sessioni di laboratorio (e completato in modo autonomo).
INF/01 - INFORMATICA - CFU: 6
Laboratori: 36 ore
Lezioni: 24 ore
Lezioni: 24 ore
Docente:
Carrazza Stefano
Turni:
-
Docente:
Carrazza StefanoDocente/i
Ricevimento:
Lunedi a venerdi a partire dalle 12:30
Via Celoria 16, ufficio DC/1/4
Ricevimento:
su appuntamento via mail
Ufficio S 6008, VI piano, Dip. Informatica "Giovanni Degli Antoni", via Celoria 18, 20133 Milano, Italy
Ricevimento:
Martedì, 9:00-10:00 o su appuntamento (richiesta via e-mail al docente)
Stanza C12, quinto piano edificio LITA, Dipartimento di Fisica, via Celoria 16.