Il corso di Programmazione 2 ha lo scopo di fornire gli strumenti per la risoluzione di semplici problemi connessi all'uso di alcune strutture dati elementari attraverso l'utilizzo della programmazione ad oggetti. In particolare il corso parte dall'introduzione del concetto di modello di dati astratto per poi introdurre ed approfondire diversi modelli dei dati quali: pile, code, liste e alberi e grafi.
Verranno inoltre studiati i principali algoritmi di gestione delle strutture dati. In particolare i principali algoritmi di ordinamento, tra cui bubble sort, insertion sort, quicksort e mergesort.
Il linguaggio C++ verrà usato come strumento principale per presentare le implementazioni delle strutture dati e degli algoritmi.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi.
Programmazione I
Fortemente Consigliata
Il Programma Diddatico è diviso nelle seguenti tre parti: fondamenti di programmazione C++, Elementi di programmazione ad oggetti, Strutture Dati.
PARTE I Funzioni Concetto di funzione, Stuttura di una funzione, Prototipi delle funzioni, Passaggio di parametri a una funzione, Argomenti di default, Funzioni in linea (inline), Visibilità, Classi di immagazzinamento, Visibilità di una funzione, Concetto e uso di funzioni di libreria, Sovraccaricamento delle funzioni, Ricorsione, Template di funzioni.
Array Array, Inizializzazione di un array, Array di caratteri e stringhe di testo, Array multidimensionali, Passaggio di vettori come parametri, Ordinamento di vettori, Ricerca nei vettori, Strutture e unioni Strutture, Accesso ai campi delle strutture, Strutture annidate, Array di strutture, Utilizzare le strutture come parametri, Funzioni membri di strutture, Unioni, Enumerazioni, typedef. Puntatori e riferimenti Riferimenti, Puntatori, Puntatori null, Puntatore a puntatore, Puntatori e array, Array di puntatori, Puntatori a stringhe, Aritmetica dei puntatori, Puntatori costanti e puntatori a costanti, Puntatori come argomenti di funzioni, Puntatori a funzioni, Puntatori a strutture. Allocazione dinamica della memoria Gestione dinamica della memoria, L’operatore new, L’operatore delete, Gestione dell’overflow di memoria, Tipi di memoria in C++. Stringhe Concetto di stringa, Lettura di stringhe, Array e stringhe come parametri di funzioni, La libreria cstring, Conversione di stringhe in numeri. Ordinamento e ricerca Algoritmi di ordinamento elementari, Ordinamento per scambio, Ordinamento per selezione, Ordinamento per inserimento, Ordinamento a bolle, Ordinamento shell, Ricerca sequenziale e binaria nei vettori, Analisi degli algoritmi di ricerca. Ricorsione Funzioni ricorsive, Confronto tra ricorsione e iterazione, Esempi di utilizzo della ricorsione, Quicksort. Flussi e file: libreria standard di I/O Flussi (stream), La libreria di classi per l’I/O, La classe istream, La classe ostream, Formattazione dell’output, Indicatori di formato, I/O da file, I/O binario, Accesso diretto.
|
PARTE II Classi e oggetti Classi e oggetti, Definizione di una classe, Costruttori, Distruttori, Overloading di funzioni membro. Errori frequenti di programmazione. Classi derivate: ereditarietà e polimorfismo Classi derivate, Tipi di ereditarietà, Distruttori, Ereditarietà multipla, Binding, Funzioni virtuali, Polimorfismo, Vantaggi del polimorfismo. Template Genericità, Template in C++, Template di funzioni, Template di classi, Modelli di compilazione di template, Template e polimorfismo. Sovraccaricamento degli operatori Sovraccaricamento 585 Sovraccaricamento degli operatori unari e binari, Sovraccaricamento degli operatori + e - e dell’operatore di assegnamento, Sovraccaricamento degli operatori di inserimento, estrazione, new e delete, Conversione di dati e operatori di conversione forzata di tipi.
|
PARTE III Liste Le liste, Operazioni con le liste, Lista doppiamente concatenata, Liste circolari. Pile e code Concetto e gestione di una pila, Concetto e gestione di una coda. Alberi Gli alberi, Alberi binari, Struttura di un albero binario, Alberi di espressione, Visita di un albero, Albero binario di ricerca. |
Le risorse principali messe a disposizione dello studente sono le lezioni frontali, la cui frequenza è fortemente consigliata.
Per seguire meglio le lezioni, vengono messe a disposizione le slides utilizzate per il corso. Le slides non costituiscono un mezzo di studio: forniscono un dettaglio puntuale sugli argomenti trattati a lezione.
Libro di testo. Fondamenti di Programmazione in C++ |
Libri consigliati. Effective C++ e More Effective C++ |
http://www.dmi.unict.it/catalano/programmazione-ii/
L'esame consiste di una prova di laboratorio e di una prova orale
Non ci sono prove in itinere
Non ci sono prove di fine corso
Si consulti la pagina web del docente