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/
* | Argomenti | Riferimenti testi | |
1 | * | Funzioni. Arrays. Passaggio di array per riferimento. Esercizi su array: Segmenti di somma massima. Array di caratteri: stringhe. Strutture e Unioni. Puntatori. Puntatori e Array. Puntatori a Funzioni. Gestione dinamica della memoria. Operatori New e Delete. | Fondamenti di Programmazione in C++ |
2 | * | Ricorsione. Ricorsione vs Iterazione. Prodotto di interi. Sequenza di Fibonacci. Massimo Comune Divisore: versione ricorsiva e versione iterativa. Torri di Hanoi: soluzione ricorsiva. | |
3 | * | Complessità di problemi computazionali. Tempo e Spazio. Tempo polinomiale e tempo esponenziale. Sommatorie notevoli. Intrattabilità di problemi computazionali. | |
4 | * | Algoritmi di ordinamento elementari: Ordinamento per scambio, per inserimento, a bolle. Lower bounds per gli algoritmi di ordinamento basati su confronti. Paradigma Divide et Impera. Merge Sort: Implementazione e Analisi. Quicksort. Idee e Implementazione. Analisi del caso migliore e analisi del caso peggiore. Ricerca sequenziale. Ricerca binaria. Complessità della ricerca binaria. | |
5 | * | Classi e oggetti. Attributi e metodi. Costruttori e distruttori. Calssi su più files Classi derivate, Tipi di ereditarietà, Distruttori, Ereditarietà multipla, Binding, Funzioni virtuali, Polimorfismo, Vantaggi del polimorfismo. Binding Statico e binding dinamico. Funzioni virtuali. Templates di classi e templates di funzioni | |
6 | * | Liste Concatenate. Inserimento, inserimento in testa, inserimento in coda. Ricerca. Rimozione di un elemento. Liste doppiamente concatenate. Inserimento e Cancellazione. Liste circolari. Pile. Implementare Pile con Array. Implementazione con puntatori. | |
7 | * | Code. Code implementate con array circolari. | |
8 | * | Alberi. Profondità e altezza di un albero. Alberi equilibrati. Visita di Alberi: cenni a visita in ampiezza e profondità. Visita Preorder, Inorder e Postorder. Complessità delle procedure Inorder, Preorder e Postorder. Inserimento, Ricerca, Massimo e Minimo. Cancellazione Implementazione della procedura di Cancellazione. Procedure Trapianta. Successore. Versioni iterative delle procedure inorder, preorder e postorder. | |
9 | * | Sovraccaricamento degli operatori |
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