fondamenti di informatica - Dipartimento di Ingegneria dell

FONDAMENTI DI INFORMATICA
Emanuele Marino
Corso di Laurea in Ingegneria per l’Ambiente e il Territorio
Anno accademico 2008 – 2009
Introduzione:
L'informatica e il concetto di Algoritmo. Definizione di Calcolatore Elettronico. Struttura
gerarchica di un Calcolatore Elettronico. Il concetto di Programma e di Linguaggio di
Programmazione.
Algoritmi:
Definizione formale di Algoritmo. Dati e Istruzioni. Istruzioni di controllo e predicati. Il linguaggio
dei Diagrammi a Blocchi. Schemi di Sequenza, Selezione e Iterazione. Algoritmi Ricorsivi. Metodo
delle Scomposizioni successive. Cenni alla Complessità degli Algoritmi.
Calcolatori:
Sistemi di numerazione posizionali in base 2, 8 e 16. Conversioni e operazioni aritmetiche. Codici
EBCDIC, ASCII e UNICODE. Rappresentazione di numeri interi in Complemento a 2 e in Modulo
e Segno. Rappresentazione di numeri reali in virgola fissa e virgola mobile. Precisione di Macchina
ed errori di Troncamento. Cenni alla rappresentazione di immagini e suoni. Algebra Booleana:
variabili logiche e connettivi logici. Tavole di verità. Assiomi dell'Algebra Booleana. Funzioni
logiche. Forme di riduzione. Cenni alle Reti Logiche. Architettura di Von Neumann. Processore,
Memoria principale, Dispositivi periferici e Bus di sistema. Componenti di una CPU. Gerarchie di
memoria e principi di funzionamento. Il linguaggio Macchina e Assembler. Esecuzione di un
programma nella macchina di Von Neumann. Estensioni della Macchina di Von Neumann:
memoria cache, parallelismo virtuale (pipeline), architetture multiprocessore, cenni alle architetture
CISC e RISC.
Linguaggi di Programmazione:
I linguaggi di programmazione ad alto livello. Traduttori: interpreti e compilatori. Schemi di
interpretazione e compilazione. Modello ibrido. Definizioni di Grammatica e Linguaggio generato
dalla Grammatica. Notazione EBNF e Diagrammi Sintattici. Analisi lessicale Bottom-Up.
Programmazione in C:
La struttura generale di un programma: fondamenti del linguaggio C. Il preprocessore e le direttive
al preprocessore. Istruzioni e Librerie. Tipi di dati: tipi scalari e dichiarazione di variabili,
conversioni implicite ed esplicite, definizioni di tipi. Espressioni ed operatori aritmetici e
relazionali. Espressioni booleane in C. Identificatori di costanti e variabili. Strutture linguistiche per
il controllo del flusso. Funzioni. Passaggio parametri per valore e per indirizzo. Introduzione ai
puntatori. Prototipi di funzioni, header file. Scrittura di un programma su più moduli. Cenni alle
funzioni di Libreria Standard. Durata ed ambito di visibilità delle variabili. Variabili locali e globali.
Array. Array multidimensionali. Il tipo di dato “puntatore”. Operatori unari per l’utilizzo dei
puntatori. Array e puntatori. Aritmetica dei puntatori. Strutture dati allocate dinamicamente.
Passaggio di array a funzioni. Stringhe: relazioni fra stringhe ed array. Alcune funzioni della
Libreria standard operanti su stringhe. Passaggio di parametri al main. Accesso ai file ASCII.
Lettura e scrittura da file. Strutture: definizione di variabili strutturate e uso di vettori di strutture;
passaggio di strutture alle funzioni, puntatori a strutture. Accesso ai campi di una struttura e vettore
di strutture. Allocazione dinamica di un vettore di strutture. Le liste lineari concatenate e confronto
con i vettori. Realizzazioni concrete in C. Cenni alle strutture “Pila” e “Coda”. Strutture ad albero.
Gli Alberi binari. Definizioni, nomenclatura e proprietà. Realizzazione concreta in C. Algoritmi di
visita di un Albero binario. Gli Alberi binari di ricerca. Cenni ai Grafi: rappresentazioni e algoritmi
di visita. Problemi di ricerca su strutture dati. La ricerca sequenziale e binaria: algoritmi e analisi
della complessità. Problema dell’ordinamento: ordinamento per Inserzione. Ordinamento in un
vettore: Bubblesort e Quicksort. Complessità dell’ordinamento.