Programma Definitivo Programmazione + Laboratorio (Corso A) a.a. 2002/2003 Docente: Laura Caponetti Risolvere problemi con il computer: dal problema all'algoritmo Problem solving: algoritmi e programmi. Notazioni grafiche per esprimere algoritmi: grafi di flusso. Notazioni lineari per esprimere algoritmi: linguaggio naturale strutturato. Programmazione strutturata. Enunciato del teorema di Bohem-Jacopini. Decomposizione di problemi in sottoproblemi: albero di decomposizione funzionale. [Testo 1, introduzione]. Dall'algoritmo al programma Linguaggi di programmazione: basso ed alto livello. Linguaggi imperativi. Cenni sulla loro evoluzione. Linguaggi e grammatiche. Sintassi dei linguaggi di programmazione. Diagrammi sintattici. Cenni sui compilatori. [Testo1, capitolo 1]. Linguaggi di programmazione: dati e controllo Dati: tipi di dato e rappresentazioni. Tipi semplici. Compatibilità ed equivalenza tra tipi di dato. Variabili ed istruzione di assegnazione. Strutture di controllo di base. Astrazioni funzionali, procedure e funzioni. Dichiarazioni e campo di azione degli identificatori. Tecniche di legame dei parametri. Effetti collaterali in procedure e funzioni. Implementazione di procedure e funzioni. Ricorsione. [Testo 1, capitolo 2]. Linguaggio Pascal Alfabeto. Costanti, tipi,variabili, etichette. Dichiarazioni. Tipi semplici: integer, real, boolean, char. Tipi subrange ed enumerativo. Istruzione di assegnazione ed espressioni. Operatori di relazione. Operatori booleani. Selezione: istruzioni condizionali If, Case. Strutture iterative: While, Repeat, For. Procedure e funzioni: dichiarazione, parametri formali, attivazione e parametri attuali. Array, array compattati, stringhe. Prodotto cartesiano e record. File: operatori get, put, reset, rewrite. Text file. Procedure di Input/Output: Read, Readln, Write, Writeln. [Testo 2]. Metodologie di programmazione La qualità di un programma. Principi di progetto. Metodologie di progetto: top-down e bottom-up. Criteri di modularizzazione: coesione ed accoppiamento. Programmazione in grande e programmazione in piccolo. La documentazione. Una metodologia di progetto: Analisi dei requisiti, scelta della strategia di soluzione, definizione delle strutture dei dati, codifica in un linguaggio. Analisi di programmi: correttezza, classificazione degli errori. Test di un programma: metodi basati sulle specifiche. [Testo 1, capitoli 4,5]. Algoritmi fondamentali Algoritmi elementari: scambio dei valori di due variabili, conteggio, sommatoria di un insieme di numeri, calcolo del fattoriale, conversione da caratteri a numeri in base 10, massimo comun divisore di 2 interi, calcolo di un numero di Fibonacci. Algoritmi su array: inversione dell’ordine di un array, costruzione di istogrammi mediante array, ricerca del valore massimo, rimozione di valori duplicati, fusione di due array ordinati, ordinamento per selezione e bubble sort, ricerca lineare e binaria. Algoritmi su file di testo: modifica della lunghezza delle linee, allineamento dei margini. Algoritmi su file tipizzati: creazione di un file di record, inserimento di un record, cancellazione di un record, ricerca di un record, ordinamento secondo un campo. Algoritmi ricorsivi: fattoriale, mergesort. [Testi 1, 2]. Testi consigliati 1 C.Batini, L.Carlucci Aiello, M.Lenzerini, A.Marchetti-Spaccamela, Fondamenti di programmazione dei calcolatori elettronici, Franco Angeli Milano 2 J. Bishop, Pascal - Corso di Programmazione, Addison-Wesley Riferimenti bibliografici 3 D.R.Dromey, Algoritmi Fondamentali, Gruppo Editoriale Jackson 4 Welsh, Elder, Introduction to Pascal, Prentice-Hall