PROGRAMMAZIONE

Diario Esami Orario Lezioni Prenota Esame

l. ELEMENTI DI INFORMATICA GENERALE.
Soluzione di problemi e concetto di algoritmo. Definizione del problema: dati di input e di output. Proprietà caratterizzanti l'algoritmo. Cenni sull'architettura degli elaboratori elettronici digitali: unita' centrale ed unita' periferiche, memorie RAM e ROM, memoria di massa. Rappresentazione interna delle informazioni. Codifica binaria. Rappresentazione dei dati alfanumerici: codice ASCII. Notazione posizionale. Rappresentazione binaria degli interi con e senza convenzione del complemento a 2. Rappresentazione binaria dei numeri reali. Operazioni aritmetiche tra numeri binari. Conversione da decimale a binario e viceversa. Sistemi ottale ed esadecimale. Elementi di logica, Variabili logiche. Operazioni logiche (NOT, OR, AND, XOR, NAND, NOR) e loro proprieta'. Algebra booleana. Porte logiche. Operazioni aritmetiche tra numeri binari viste come operazioni logiche. Codifica di algoritmi e linguaggi di programmazione, linguaggio macchina e linguaggi di alto livello. Compilatori ed interpreti. Diagrammi di flusso. Strutture fondamentali degli algoritmi (sequenziale, condizionale ed iterativa): enunciato del teorema di Jacopini-Bohm. 

2. INTRODUZIONE ALLA PROGRAMMAZIONE.
Linguaggi di programmazione: sintassi e semantica. Dati e controllo. Struttura di un programma Pascal: intestazione, dichiarazione e corpo dei programma. Tipi di dati in Pascal e loro rappresentazione. Dati costanti e dati variabili e loro dichiarazione (CONST, VAR). Operatori aritmetici e logici. Istruzioni di assegnazione, di controllo IF-THEN-ELSE, CASE) ed iterative (FOR ... TO ... DO, FOR..DOWNTO ... DO,REPEAT ... UNTIL, WHILE ... DO). Concetto di tipo di dato. Dati scalari: i tipi predefiniti numerabili (INTEGER, CHAR, BOOLEAN). Il tipo REAL. Tipi scalari definibili per enumerazione o per subrange. Definizione di nuovi tipi di dati con l'istruzione TYPE. Le funzioni PRED, SUCC, ORD sui tipi numerabili. La funzione CHR. Istruzioni di input da tastiera (READ, READLN) e di output su video (WRITE, WRITELN), Astrazioni funzionali. procedure e funzioni. Variabili locali e globali. Parametri formali e parametri reali. Tecniche di legame dei parametri (per valore o per indirizzo). Effetti collaterali in procedure e funzioni. Implementazione di procedure e funzioni. La ricorsione. Regole di visibilita' dei dati. 

3. STRUTTURE DI DATI.
Strutture di dati. Tipi astratti di dati e loro rappresentazione. Array (vettori e matrici). 1 record, fissi e con variante. Set ed operazioni su dati di tipo Set. Record fissi e con variante. Files: di testo, strutturati e non tipizzati. Le procedure RESET, REWRITE, APPEND, CLOSE, READ, WRITE, READLN, WRITELN, BLOCKREAD, BLOCKWRITE, la funzione EOF. I tipi puntatore. Le liste: liste semplici, rappresentazione sequenziale, rappresentazione collegata mediante array e mediante puntatori, liste doppie. Allocazione dinamica della memoria, heap manager. Creazione di strutture dinamiche di dati, procedure NEW, DISPOSE, GETMEM, FREEMEM, le funzioni MEMAVAIL e MAXAVAIL. Pile e code. Alberi binari: rappresentazione sequenziale, rappresentazione mediante lista, alberi binari ordinati, alberi binari bilanciati. La ricorsione (semplice, binaria, nonlineare e mutua).

4. METODOLOGIE DI PROGRAMMAZIONE.
Le qualità di un programma. Principi e metodologie di progetto: analisi dei requisiti, raffinamento iterativo dell'algoritmo. Criteri di modularizzazione. La programmazione strutturata. La documentazione. Correttezza ed errori di un programma. Prove formali di correttezza di programmi con e senza procedure. Controllo di eventuali errori nei dati di ingresso. Test di un programma. Efficienza dei programmi. Il modello di costo. Comportamento asintotico. La complessita' di un programma e di un problema. Le notazioni O e Omega. Valutazione della complessita' di un programma. Istruzione dominante.Delimitazioni alla complessità di un problema. 

5. ALGORITMI.
Algoritmi di base: scambio del contenuto di due variabili, generazione dei numeri di Fibonacci, inversione delle cifre di un intero, calcolo dei fattoriale di un intero, calcolo dei fattori primi di un numero intero, calcolo del massimo comune divisore di due interi, algoritmo di Euclide per il massimo comune divisore di due interi, potenza intera di un numero reale, ricerca numeri perfetti. Determinante di una matrice. Risoluzione sistemi lineari. Generazione di numeri pseudocasuali. Algoritmi per array: inversione dell'ordine degli elementi di un array, ricerca del massimo e del minimo in un array, eliminazione dei doppioni in un array ordinato, partizione di un array. Algoritmi di ordinamento per array: inserimento diretto, selezione diretta, bubblesort, shakesort, shellsort, quicksort. Ordinamento per fusione. Algoritmi di ricerca in un array: ricerca sequenziale e binaria. Algoritmi di gestione delle liste semplici: aggiunta e cancellazione di elementi ad una pila, ad una coda e ad una lista ordinata, visita di una lista, ricerca di un elemento in una lista. Algoritmi di gestione degli alberi binari ordinati: ricerca, inserimento e cancellazione di un elemento in un albero binario ordinato possibili visite di un albero binario. Gestione di una agenda telefonica con array di record e con strutture dinamiche (liste, alberi). Esempi di algoritmi ricorsivi: fattoriale di un numero, numeri di Fibonacci, potenza intera di un reale. Calcolo della complessita' computazionale per alcuni algoritmi: potenza n-esima, ordinamento, ricerca. 

6. ULTERIORI PRESTAZIONI DEL TURBO PASCAL (BORLAND).
I tipi BYTE, SHORTINT, LONGINT. Il tipo STRING. Funzioni e procedure che operano su stringhe. Rappresentazione interna dei dati scalari e strutturati. Ordinamento alfabetico. File ad accesso diretto. La procedura SEEK. 1 sottoprogrammi RANDOM e RANDOMIZE. Direttive al compilatore: controllo dei range ({ $R+/- }), dell'input ({$I+/-}). Funzione IORESULT. Controllo dello stack e dell'heap (1 $M nl,n2,n3 }). Generazione di codice per 80286 ({$G+/-}). Emulazione del coprocessore matematico ({$N+/-}), ({$E+/-}). Controllo sul calcolo delle operazioni logiche ({$B+/-}). Direttiva FORWARD per la mutua ricorsione. UNIT del Turbo Pascal (SYSTEM, CRT, DOS, PRINTER, GRAPH, OVERLAY) e loro piu' importanti caratteristiche. L'utility TPUMOVER. Struttura di una unit: intestazione, sezione di interfaccia, sezione di implementazione e sezione di inizializzazione. Programmazione orientata agli oggetti. Oggetti, incapsulazione, ereditarieta' e polimorfismo 

TESTI CONSIGLIATI
1. N. Wirth. Principi di programmazione strutturata. ISEDI. 
2. N. Wirth. Algoritmi + strutture dati = programmi. Tecniche Nuove. 
3. C. Batini, L. Carlucci Aiello, M. Lenzerini, A. Marchetti Spaccamela, A. Miola, Fondamenti di programmazione dei calcolatori elettronici. Franco Angeli. 
4. R. Geoff Dromey. Algoritmi fondamentali. Gruppo Editoriale Jackson. 
5. Borland - Turbo Pascal - manuale per l'uso. 

Il Docente Ufficiale 
Dr. Francesco OLIVERI