Programma:
Introduzione
al corso e concetti introduttivi.
Reti di calcolatori, Internet e World Wide Web.
L’informatica e i suoi campi di applicazione.
Elaboratori
elettronici e sistemi di elaborazione.
Sistemi di calcolo e principali componenti hardware,
architetture, la macchina di Von Neumann.
Il software di base, il sistema operativo e
le sue funzioni principali, e i programmi applicativi.
Elementi di
programmazione.
Metodi per l'analisi di un problema, introduzione
agli algoritmi e metodologie di progettazione.
Fasi di sviluppo e verifica di programmi, strumenti:
editor, traduttori, linker, loader e debugger.
Introduzione ai linguaggi di programmazione,
cenni sulla loro evoluzione, sintassi e semantica,
grammatiche, BNF, EBNF, diagrammi e alberi sintattici.
Codifica binaria dell'informazione e algebra
di Boole.
Il linguaggio
C.
Struttura di un programma C, main,
identificatori, commenti.
Espressioni: tipi di dato primitivi; costanti;
espressioni e operatori: semplici, composti,
aritmetici, relazionali, logici, condizionali
e di concatenamento; grammatica e alberi sintattici
delle espressioni, priorità e associatività
degli operatori.
Variabili: dichiarazione e definizioni; inizializzazione;
caratteristiche: scope, tipo, lifetime e valore;
effetti collaterali: assegnamento, incremento
e decremento.
Funzioni: il modello client-server; dichiarazione
e definizione, chiamata e ritorno; binding e
environment, tecniche di legame dei parametri;
strategie di composizione, principi di progetto
e relazione tra ricorsione e iterazione; il
modello a run-time delle funzioni, record di
attivazione.
Puntatori: estrazione di indirizzo e dereferenziamento;
procedure e passaggio per puntatore.
Istruzioni: semplici; di controllo a basso livello
(assembler); programmazione strutturata, strutture
di controllo in C: blocco, selezione semplice
e multipla, iterazione, alterazione di flusso.
Tipi strutturati: array e aritmetica dei puntatori,
strutture, typedef, enumerazioni.
Progetti: l’ambiente di sviluppo integrato
DJGPP; argomenti dalla linea di comando; progetti
su più file; librerie di funzioni predefinite,
file header; direttive al preprocessore C; macro.
Input/Output: canali standard; I/O a caratteri,
bufferizzato e formattato; funzione per la lettura,
scrittura e posizionamento su file binari e
di testo.
Ancora sui puntatori: allocazione dinamica;
puntatori a strutture, a puntatori, a funzioni.
Rappresentazione
dei numeri naturali, interi e reali.
Notazioni posizionali; rappresentazioni degli
interi in modulo e segno e in complemento a
2; rappresentazione normalizzata dei reali con
mantissa e resto; algoritmi per le conversioni
stringa/numero/stringa; valori rappresentabili
e cifre significative per i tipi primitivi del
C; errori: overflow, troncamento, incolonnamento,
cancellazione, accumulazione.
Algoritmi e
complessità.
Complessità di algoritmi e problemi,
notazioni asintotiche.
Algoritmi di ordinamento: naive sort, bubble
sort, insertion sort, quicksort, merge sort.
Generalizzazione del problema dell’ordinamento.
Algoritmi di ricerca sequenziale e binaria.
Strutture dati
classiche.
Definizione tipi di dato astratti (ADT).
Liste: ADT; rappresentazioni statica e collegata,
con indici e puntatori; implementazione delle
operazioni primitive sia come funzioni che procedure;
implementazione delle principali operazioni
derivate (append e inserimento ordinato); liste
circolari, bidirezionali e liste di liste.
Stack e code: ADT; rappresentazioni tramite
vettore e indice e tramite lista; implementazione
delle operazioni primitive.
Alberi: definizioni; ADT alberi binari, rappresentazione
collegata con strutture e puntatori; implementazione
delle operazioni primitive; algoritmi di visita;
alberi binari di ricerca e inserimento ordinato.
Testi di
riferimento:
- A. Bellini, A. Guidi, Linguaggio C - Guida
alla programmazione, McGraw-Hill, 1999.
Altri testi:
B.W.Kernigham, D.M.Ritchie, Linguaggio
C- II edizione, Jackson Libri, 1992.
C.Batini, L.C.Aiello, M.Lenzerini, A.Marchetti
Spaccamela, A.Miola, Fondamenti di programmazione
dei calcolatori elettronici, Franco Angeli,
1993.
B.Stroustrup, C++ (terza edizione), Addison-Wesley,
2000.
H.Schildt, Guida
al linguaggio C++, McGraw-Hill, 1996.
|