AVVISI
OBIETTIVO DEL CORSO:
L'obiettivo del corso, che prosegue il cammino iniziato con Programmazione I, é quello di portare lo studente ad un buon livello di dimestichezza programmativa. Il linguaggio di riferimento è il C. Alla fine del corso lo studente
MODALITA' D'ESAME:
L'esame consiste in una prova scritta (un insieme di esercizi) ed una
prova orale facoltativa.
È prevista una prova scritta intermedia (mercoledì 23
aprile) che
riguarda solamente gli argomenti svolti nella prima parte del corso.
Nell'appello della sessione estiva gli esercizi della prova scritta
saranno divisi in due parti: gli esercizi relativi agli argomenti della
prima parte del corso e quelli relativi alla seconda parte. Chi ha
superato la prova intermedia può completare l'esame svolgendo
solo gli esercizi della seconda parte.
Il risultato della prova intermedia è valido solamente per
l'appello della sessione estiva.
Se si desidera tentare di migliorare
il voto della prova scritta è possibile sostenere la prova
orale. In quest'ultimo caso, se si rifiuta il voto determinato dalle
due prove (scritta e orale) si dovrà risostenere la prova
scritta.
Nella prova scritta è estremamente importante che le soluzioni
siano scritte in modo chiaramente leggibile ed esauriente. Se una
soluzione non è sufficientemente ben scritta, non sarà
presa in considerazione.
PROGRAMMA (preliminare)
Ricorsione.
Richiami di programmazione ricorsiva: i fondamenti della
ricorsione; lo stack delle chiamate ricorsive; esempi di programmi
ricorsivi.
La "tail recursion". Richiami su strutture dinamiche ricorsive: le
liste. Cenni
di complessità di spazio e di tempo per gli algoritmi e i
programmi.
Confronto tra soluzioni iterative e ricorsive. Tecniche
per la scrittura di programmi corretti. L'importanza della
specifica precisa di un programma.
Precondizioni e postcondizioni delle funzioni. Uso di assert per
la loro verifica. Strutturazione
dei programmi: sottoprogrammi e moduli. Tipi di dato
astratti. Mascheramento dell'informazione. Pile e code: definizione e
implementazione
mediante liste e vettori. Invarianti come strumenti di progettazione di
cicli.
Applicazione del metodo al problema dell'ordinamento.
Alberi binari: definizione e implementazione. Proprietà degli alberi binari: altezza, foglie, alberi pieni, completi, criteri di bilanciamento. Alberi binari di ricerca. Grafi, loro rappresentazione e visita di grafi.
Aspetti
di sicurezza nello sviluppo di programmi in C.
RISORSE:
Al Kelley, I. Pohl C, didattica e programmazione,
Addison-Wesley, traduzione italiana a cura del Prof. G. Pighizzini,
Univ. Milano.
In questo testo sono trattati quasi tutti gli argomenti del corso di
Programmazione II.
(Si ringrazia il prof. R. Silvestri per i
seguenti commenti alla bibliografia):
(questo testo è già stato utilizzato a Programmazione I, e servirà ancora per alcune lezioni di Programmazione II).
Un manuale di riferimento per il linguaggio C estremamente curato e preciso. Utilissimo per risolvere dubbi circa: ciò che è C standard (ANSI/ISO) e ciò che non lo è, portabilità, compatibilità con il C++, ecc. Fortemente consigliato a chiunque voglia fare un uso non occasionale del linguaggio C.
Il classico manuale del linguaggio C.
B.W. Kernighan, R. Pike
The Practice of Programming, Addison-Wesley.
Tratta in modo sintetico e significativo tutti gli aspetti della
programmazione. Dalle strutture dati ed algoritmi al debugging e
testing, dallo stile di programmazione alla progettazione di librerie,
passando per l'analisi delle prestazioni e i metodi per migliorare la
portabilità. I linguaggi considerati sono: C, C++ e Java.
J.
Bentley Programming Pearls, Addison-Wesley.
Molti dei temi trattati nel libro di Kernighan e Pike sono qui
elaborati in modo originale e stimolante. Pieno di divertenti ed
istruttivi aneddoti che mostrano la reale differenza tra la teoria e la
pratica della programmazione e financo dell'ingegneria del software.
Usa i linguaggi C e C++.
S. Mc
Connell Code Complete: A Practical Handbook of Software
Construction., Microsoft Press.
Un trattamento quasi enciclopedico di tutto ciò che riguarda la
programmazione. Tantissimi suggerimenti e consigli per migliorare la
programmazione in un qualsiasi linguaggio imperativo: C, Pascal,
Fortran, ecc.
Il C introdotto in confronto a Java, per chi già conosce Java. CperJavaExpert.pdf: