Programma del corso (teoria e laboratorio), testi consigliati
Programma delle lezioni di teoria
Programma delle esercitazioni di laboratorio
Testi consigliati
- 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
- 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
- D.S. Malik:
Programmazione in C++.
Apogeo, 2013.
- L.J. Aguilar:
Fondamenti di programmazione in C++. Algoritmi, strutture dati e oggetti.
McGraw-Hill, 2008.