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.