FONDAMENTI DI INFORMATICA A-L
Corsi di
Laurea in Ingegneria
Informatica
e dell’automazione, Elettronica, Telecomunicazioni, Biomedica
Prof.
Primo Zingaretti
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.
1.
A. Bellini, A. Guidi,
Linguaggio C - Guida alla programmazione – seconda edizione, McGraw-Hill, 2003.
2.
Presso il servizio di
copisteria sono disponibili tutte le slide presentate a lezione.
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.