Programma Preliminare
Programmazione + Laboratorio (Corso B) a.a.2003/2004
Docente: Lanza Antonietta
Modulo 1 - Risolvere problemi con il computer: dal problema
all'algoritmo
Astrazione del processo di calcolo: algoritmo e sue caratteristiche.
Modelli di composizione fondamentali. Principi della
programmazione strutturata. Notazioni grafiche e lineari per rappresentare
algoritmi: Grafi di flusso.(strutturati). Grafi di
Nassi-Schneidermann.. Linguaggio testuale strutturato. Teorema di BohmJacopini (enunciato).
Modulo 2 - Dall'algoritmo al programma
Delega della esecuzione di un procedimento di calcolo. Linguaggi a basso
e ad alto livello. Linguaggi imperativi. Cenni
sulla loro evoluzione. Linguaggi e grammatiche. Forma di Backus-Naur
(BNF). Carte sintattiche. Cenni sui compilatori.
Modulo 3 - La decomposizione di problemi
Riduzione di problemi complessi a sottoproblemi primitivi. Decomposizione
di problemi attraverso sequenze, selezioni,
relazioni di ricorrenza (iterazione e ricorsione). Albero di
decomposizione.
Modulo 4 - Linguaggi di programmazione: dati e controllo
Concetto di variabile. Tipi di istruzioni. Operative. Istruzioni
dichiarative. Concetto di tipo di dato. Tipi semplici.
Compatibilità ed equivalenza tra tipi di dato. Variabili ed istruzione di
assegnazione. Strutture di controllo. Dichiarazioni
e campo di azione degli identificatori. Astrazioni funzionali: procedure e
funzioni. Tecniche di legame dei parametri.
Effetti collaterali in procedure e funzioni. Attivazione dei
sottoprogrammi. Ricorsione. Meccanismi di definizione di
strutture di dati: trasformazioni finite, prodotto cartesiano, insieme
potenza, sequenze.
Modulo 5 - Metodologie di progetto di programmi
Metodologie di progetto di programmi. Le qualità di un programma. Approcci
top-down, bottom-up, ibrido. Fasi del
progetto. Analisi del problema. Scelta della strategia di soluzione.
Definizione delle strutture dei dati. Codifica.
Documentazione. Testing e debugging di un programma. Classi di equivalenza.
Modulo 6 - Algoritmi fondamentali
Algoritmi elementari: Scambio, Conteggio, Determinazione del massimo,
Sommatoria, Fibonacci, MCD, Fattoriale.
Algoritmi su array: Inizializzazione/Lettura/Stampa, Inversione
dell'ordine di un array, Ricerca del massimo/minimo,
Eliminazione dei doppi, Costruzione di istogramma, Partizionamento,
Fusione, Ordinamento (selezione, a bolle,
inserzione, Shell, Hoare, Quicksort ricorsivo), Ricerca (sequenziale,
ottimizzata, binaria, Hash), Somma di matrici,
Prodotto di matrici. Algoritmi ricorsivi.
Algoritmi su file: Creazione, Copia, Confronto, Scansione sequenziale,
Aggiornamento, Fusione, Conteggio delle linee,
Fusione, Ordinamento per fusione naturale.
Modulo 7 - Un linguaggio strutturato del paradigma procedurale: il
linguaggio Pascal
Alfabeto. Struttura di un programma. Sezioni dichiarative di costanti,
tipi, variabili. Tipi semplici predefiniti. Tipi definiti
dall'utente. Istruzione di assegnazione ed espressioni. Istruzioni
selettive. Istruzioni iterative. Procedure e funzioni. Unit.
Input/Output. Tipi strutturati.
TESTI CONSIGLIATI
C.Batini, L.Carlucci Aiello, M.Lenzerini, A.Marchetti-Spaccamela,
Fondamenti di programmazione dei calcolatori
elettronici, Franco Angeli Milano
N. Wirth - Principi di programmazione strutturata - ISEDI (UTET Libreria),
1995.
D.R.Dromey, Algoritmi Fondamentali, Gruppo Editoriale Jackson, 1989.
K. Jensen, N. Wirth, Pascal (Standard ISO), Nuova ed. - Jackson Libri
(1996)
A. Guidi, N. Renzoni Pascal guida alla programmazione, McGraw-Hill (1999)