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)