giovedì dalle ore 14,30
alle ore 15,30
AVVISO: martedi' 15 aprile: primo esonero.
Programma del
corso a.a. 2002/2003
Obiettivo del corso.
L'obiettivo del corso, che prosegue il cammino
iniziato con Programmazione I, é quello di portare lo/a studente/ssa
ad un buon livello di dimestichezza programmativa. Si introdurranno
delle tecniche di programmazione che facilitano la produzione di
software corretto e riusabile. Il linguaggio di riferimento è il C.
Il corso é fortemente integrato con il corso
di Laboratorio Programmazione.
Programma.
1 Tecniche di
produzione di software modulare.
2 Specifica del software:
Precondizioni e postcondizioni.
3 Tipi di dato astratto e loro
implementazioni. Invarianti di rappresentazioni.Collezioni, Pile,
Code, Code di Priorita'.
4 L' ordinamento di una collezione
(algoritmi: mergesort, selection-sort, insertion-sort, quicksort,
heapsort.)
5 Cenni sulla complessità di tempo e di spazio dei
programmi.
6 Tecniche elementari di testing/debugging.
Riferimenti:
TESTI
CONSIGLIATI (i commenti alla bibliografia sono da me condivisi e qui
riportati per comodita', ma si devono al prof. R. Silvestri):
H.M. Deytel
, P.Deytel C corso completo di programmazione, Apogeo, 2000.
(questo testo è già stato utilizzato a Programmazione I, e
servirà ancora per alcune lezioni di Programmazione II).
S.P. Harbison
III, G.L. Steele Jr C: A Reference Manual Prentice Hall.
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.
Al
Kelley, I. Pohl C, didattica e programmazione, Addison-Wesley,
traduzione italiana a cura del Prof. G. Pighizzini, Univ. Milano.
In questo testo son trattati tutti gli argomenti del corso di
Programmazione II.
TESTI DI APPROFONDIMENTO:
B.W.
Kernighan, D.M. Ritchie Linguaggio C Jackson libri.
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.
Corso in linea di A. D. Marshall 1994-9 Programming in C, UNIX
System Calls and Subroutines using C.
Questo corso è
completo: da un'introduzione ad argomenti avanzati di programmazione
in C sotto UNIX, è scritto in modo chiaro e con molti esempi .
Modalità prenotazioni ed esami.
Per prenotarsi cliccare su PRENOTAZIONI e seguire le
istruzioni. Il nome del corso e' stato abbreviato in ProgAD
L'ESAME CONSISTE DI
- una prova scritta consistente nella stesura di brevi programmi
in C.
- una prova orale basata sulla discussione dei programmi scritti
e sul programma del corso.
Modalità esoneri ed esami Programmazione II :
1. Sono previste due prove di esonero dalla prova scritta durante
le lezioni, chiamate prova A e prova B.
Nota bene: non è necessario
aver superato l'esame di Programmazione I o di Logica per sostenere
le prove intermedie di Programmazione 2 , mentre lo è per affrontare
l'esame di Programmazione II.
2. Ogni appello della sessione estiva prevederà una prova scritta
divisa in due parti A e B.
Il superamento della prova di esonero
A dà diritto a sostenere solo la parte B dell'esame scritto
nelle sessioni successive e analogamente invertendo i ruoli di A e
B.
Chi non supera entrambe le prove dovrà sostenere l'intera
prova scritta . Negli appelli successivi a quelli estivi la prova
scritta andrà sostenuta integralmente.
3. Le prove scritte durano due ore. Al termine della prova il
docente proporrà una soluzione. Lo studente può, alla luce della
soluzione propostagli,
ritirare il proprio elaborato e
ripresentarsi in qualunque appello.
4. Chi viene respinto alla prova scritta può ripresentarsi
all'appello successivo solo dopo almeno un mese di studio.
5. Tutte le prove scritte consistono di esercizi di complessità
uguale o inferiore a quello svolti durante l'anno accademico.
6. Gli studenti sono tenuti a prenotare la loro prova di esame
entro le ore 12 del giorno precedente la data dell'appello.
7. Gli studenti il cui cognome inizia con una lettera compresa
nell'intervallo A-D devono seguire le lezioni e sostenere l'esame
con la prof.ssa Fachini. Deroghe a questa regola sono possibili ma
solo a seguito di domanda scritta (anche via e-mail) nella quale
siano riportate ragioni oggettive di impedimento o difficoltà a
seguire le lezioni del proprio canale.
DIARIO DELLE LEZIONI
mercoledì
5/3/2003
Introduzione al corso. Esposizione del programma del corso e
motivazioni. intr.ppt
Precondizioni e postcondizioni. precPost.ppt.
giovedì
6/3/2003
Tecniche per rendere il codice più generale e più facilmente
riusabile. Riuso.ppt:
martedì
11/3/2003
Ancora su tecniche per rendere il codice più generale e più
facilmente riusabile. ListeVoid.ppt.
mercoledì
12/3/2003
Tipi di dato astratto.ADT.ppt.
martedì
18/3/2003
Alberi binari AlbBin.ppt.
mercoledì
19/3/2003
Alberi binari bilanciati AlbBinBil.ppt.
mercoledì
26/3/2003
Alberi binari di ricerca. Qui si possono scaricare i lucidi con
l'illustrazione delle operazioni fondamentali. albBinRic.ppt,
versione corretta. Qui invece ci sono i file del programma in cui
una collezione è implementata come un albero binario di ricerca e
testata utilizzando un file di input per i dati e uno di output per
i risultati. dichColl.h,
testFileAlb.c,
OpAlbGen.c
e specColl.h.
(ho aggiunto il nome del file in testa a ogni file)
martedì
1/4/2003 La cancellazione di un nodo in un albero
binario di ricerca.
mercoledì
2/4/2003 Confronto implementazioni collezione.
martedì
8/4/2003 Tabelle hash. TabHashDis.ppt.
I file seguenti forniscono un'implementazione esempio di una tabella
Hash. dichTHash.h,
opTabHash.c,
opLVoid.c,
ProtOpList.h,
MainTHash.c.
Si tenga presente che alcuni file inclusi sono forniti sopra.
mercoledì
16/4/2003 Un nuovo ADT: la pila. Robustezza e
debugging dei programmi. Qui PilaVett.ppt
vediamo la pila implementata su un vettore e qui PilaLista.ppt
implementata con una lista.
mercoledì
23/4/2003 Un nuovo ADT: la coda. CodaVett.ppt,
CodaLista.ppt.
martedì
29/4/2003 Esempio di uso di una coda: visita per
livelli di un albero binario. VisitaLivelli.ppt
Un altro ADT: la coda di priorita'. Heap.ppt.
mercoledì
30/4/2003 Code di priorita', codifica. CodiceHeap.ppt:
versione corretta, HeapSort.ppt
.
martedì
6/5/2003 Altri metodi di ordinamento: Il
mergesort. Mergesort.ppt.
mercoledì
7/5/2003 Altri metodi di ordinamento: Il
quicksort. Quicksort1.ppt
martedì
13/5/2003 Progetto di programmi iterativi: gli
invarianti di ciclo. Applicazione: versione alternativa del
quicksort. QuickSort2.ppt.
SETTORE DELLE ESERCITAZIONI
Esercizi da fare a casa e consegnare entro la sera del
2/4/2003. Trovate la descrizione degli esercizi in: EsCasa.doc.
Secondo homework: esrcizi da fare a casa e consegnare
utilizzando il modulo 'consegna elaborati' entro la sera del
9/4/2003. La consegna deve essere effettuata tramite l'URL
Pagina
per la consegna degli homework. Trovate la descrizione degli
esercizi del secondo Homework in: homework2.html
Terzo homework: esercizi da fare a casa e consegnare
utilizzando il modulo 'consegna elaborati' entro la sera del
23/4/2003. La consegna deve essere effettuata tramite l'URL
Pagina
per la consegna degli homework. Trovate la descrizione degli
esercizi del secondo Homework in: homework3.html
Gli esempi (figure mancanti nella pagina web) in homework3.ppt
Quarto homework: esercizi da fare a casa e consegnare
utilizzando il modulo 'consegna elaborati' entro la sera del
7/5/2003. La consegna deve essere effettuata tramite l'URL
Pagina
per la consegna degli homework. Trovate la descrizione degli
esercizi del secondo Homework in: homework4.html
Gli esempi (figure mancanti nella pagina web) in alberinari.jpg
- Esercitazione del 13 marzo
2003
Costruzione di una libreria di funzioni e procedure su
liste non ordinate. Puntatori a puntatori e
ricorsione.
Soluzioni: SolEsListe.doc
- Esercitazione del 20 marzo
2003
Funzioni
e procedure su stringhe. Aritmentica dei puntatori.Compilazione di
un programma su più file.
Soluzioni su stringhe: STRINGHE.tar
Guida all'utilizzo di make: guidetomake.doc
- Esercitazione del 27 marzo
2003
Costruzione di una libreria di funzioni e procedure su
insiemi. Suddivisione di programmi in più file:
discussione.
Soluzioni: inziemi.zip
- Esercitazione del 3 aprile
2003
Costruzione di una libreria di funzioni e procedure su
alberi binari.
Soluzioni: alberibin.zip
- Esercitazione del 10 aprile
2003
Esercizi
di preparazione all'esonero: soluzioni degli esercizi del secondo
homework, esercizi sugli alberi e soluzione esercizio sulla somma
dei binari del primo homework.
Soluzioni: materiale cartaceo
distribuito in classe.
- Esercitazione del 24 aprile
2003
Stampa di
un glicine; individuazione del numero di valori pari in un
glicine; alberi binari di ricerca bilanciati nel numero dei nodi:
inserimento; cancellazione del massimo e del minimo;
ribilanciamento.
Soluzioni: ALBILANCIATI.tar
e GLICINE.tar
- Esercitazione dell'8 maggio
2003
Esercizi
su pile: Valutazione di una espressione in notazione polacca
inversa e verifica della corretta parentesizzazione di una
espressione.
Soluzioni: documentazione fornita in classe per la
valutazione dell'espressione polacca inversa. La soluzione della
verifica della corretta parentesizzazione e' disponibile in: PILE.tar
ECCO I RISULTATI DEL PRIMO ESONERO: risultati_final.html
*
Notes:
- You are currently in the TWiki.Programmazione2ad web. The
color code for this web is a (SPECIFY COLOR) background, so you
know where you are.
- If you are not familiar with the TWiki collaboration tool,
please visit WelcomeGuest
in the TWiki.TWiki web first.