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
|