FONDAMENTI DI INFORMATICA A-L

Corsi di Laurea in Ingegneria

Informatica e dell’automazione, Elettronica, Telecomunicazioni, Biomedica

Anno Accademico 2002/2003

Prof. Primo Zingaretti


PROGRAMMA DEL CORSO

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.

 


TESTO DI RIFERIMENTO

1.       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.