Diario lezioni
1/10/02 Lez. 1,2 Presentazione corso. Programma, obiettivi, organizzazione, verifica finale. Evoluzione dei sistemi di calcolo. Gerarchia dei livelli di descrizione: dall' HW alle applicazioni utente. Introduzione al concetto di macchine virtuali. Discussione di una possibile definizione di computer.
2/10/02 Lez. 3,4 Cenni alle componenti fisiche dell' hardware. Cenni alla realizzazione hardware di funzioni booleane primitive e loro assemblaggio per funzionalita' piu' complesse (esempio: half-adder). Rappresentazione di dati ed istruzioni mediante bit. Bytes e parole. Schema di von Neumann di un elaboratore. Memoria, processore, registri, bus, clock.
3/10/02 Lez. 5,6 Ciclo di esecuzione delle istruzioni da parte della CPU (ciclo fetch, decode, execute). Vantaggi di un uso non dedicato delle risorse. Sistema operativo. Principali compiti e caratteristiche del S.O. Time sharing multiprogrammazione, multiutenza, gestione delle risorse. Accesso alla informazione su disco. Fylesystems. Nomi gerarchici dei files.
7/10/2002 Lez. 7,8 Concetto di directory. Interfacce utente(interprete di comandi grafico e di linea). Introduzione ai linguaggi di programmazione. Cenni alle principali classificazioni (alto-basso livello; logici, funzionali e dichiarativi; orientati agli oggetti; interpretati o compilati). Funzioni del compilatore. Linking/loading.
8/10/2002 Lez. 9,10 Definizione di processo. Cenni ai threads. Processi isolati e cooperativi. Architettura client/server. Motivi HW della presenza di tipi dati elementari nei linguaggi di programmazione di alto livello. Rappresentazione dati elementari: dati logici; dati di carattere. Codifica ASCII. Caratteristiche principali e limitazioni.
9/10/2002 Lez. 11,12 Dati numerici. Interi senza segno. Richiami sulla rappresentazione binaria, ottale, esadecimale e conversione binaria-decimale e viceversa. Interi con segno. Rappresentazione con bit del segno, complemento a 2, con bias. Operazioni aritmetiche. Aritmetica modulare. Rappresentazione dei reali in base 2.
10/10/2002 Lez. 13,14 Algoritmo di conversione base2-base 10 per i reali. Notazione e virgola mobile e fissa. Operazioni in virgola mobile. Cifre significative. Implementazione dell' aritmetica floating point sui computer. Standard IEEE754/IEC 60559. Introduzione alle proprieta' non standard dell' aritmetica floating point.
15/10/2002 Lez. 15,16 Cenni alla struttura del linguaggio C. Esempio di programma C. Preprocessore e suo ruolo nella compilazione. Struttura del programma C. Sintassi. Uso degli spazi. Cenni all' ingegneria del software. Fasi di sviluppo SW. Programmazione strutturata (idee di base).
16/10/2002 Lez. 17,18 Tipi dati primitivi del C. Costanti e variabili. Uso della direttiva #define del preprocessore per la definizione di costanti simboliche. Operazioni tra tipi aritmetici (+,-,*,/,%,=). Assegnazione come operazione binaria. Operatori di confronto e logici.
21 e 22 /10/2002 Lezione pratica in laboratorio n.1
22/10/2002 Lez. 19,20 Precedenza tra operatori. Operatore ternario di assegnazione condizionata. Esempi di espressioni complesse. Considerazioni sulla scelta tra implementazioni diverse (esempio della delta di Kronecker). Salto condizionato. Istruzioni if, if-else, switch-case. Formati di conversione nelle function printf e scanf (descrittori d,o,x,f,e,g,c). Campi, precisione, allineamento.
24/10/2002 Lez. 20/21 Costrutti if-else nidificati. Differenze tra if-else e switch-case. Iterazioni: while, do-while, for. Istruzione break e continue. Esempi. Istruzione goto e labels. Considerazioni sul goto. Riutilizzazione di sezioni di codice e motivazione per il concetto di sottoprogramma. Introduzione alle function C. Sintassi di utilizzo delle functions. Esempi: calcolo della radice quadrata.
28 e 29 10/2002 Lezione pratica di laboratorio n.2
30/10/2002 Lez. 22/23 Diciarazione e utilizzo di una function all' iunterno di un' altra function. Definizione delle function. Istruzione return. Passaggio dei parametri e valore di ritorno. Visibilita' delle variabili. Ricorsione.
31/10/2002 Lez. 24/25 Esempio di implementazione iterativa e ricorsiva di una function per il calcolo del fattoriale. Tipo void. Utilizzo di function della libreria matematica. Comandi per il preprocessore: #include, #define, #if -#elif - #endif, #ifdef, #undef. Definizione di macro. Operazioni bit a bit e loro utilizzo per inizializzare, cancellare e verificare un singolo bit.
4 e 5 /11/2002 Lezione pratica di laboratorio n.3
6/11/2002 Lez. 26/27 Trasformazioni implicite ed esplicite (casting) tra tipi dati. Introduzione ai puntatori. Operatore "indirizzo di" ed indirezione. Puntatori ai tipi fondamentali. Utilizzo dei puntatori. Puntatori come argomento di functions. Esempio: function per scambiare due variabili. Aritmetica dei puntatori.
7/11/2002 Lez. 28/29 Puntatopri a puntatori. Motivazioni per l' introduzione delgi arrays. Sintassi della dichiariazione ed utilizzo degli arrays. Arrays e puntatori: analogie e differenze. Inizializzazione di arrays. Stringhe. Manipolazione di stringhe come arrays di caratteri. Costanti di stringa. Terminatore di stringa.
11 e 12 11/2002 Lezione pratica di laboratorio n.4
13/11/2002 Lez. 30/31 Function della libreria per stringhe e loro utilizzo. Ordinamento tra stringhe. Allocazione dinamica della memoria. Uso della malloc(). Operatore sizeof. Strutture e unioni: definizione e utilizzo.
14/11/2002 Lez. 32/33 Istruzione typedef per la definizione di alias dei tipi dati. Strutture come argomenti e valori di ritorno di function. Puntatori a strutture. Puntatori a function. Files associati ad un processo (stdin, stdout,stder). Ridirezione nelle shell UNIX. Uso della function fopen.
19 e 21/11/2002 Lezione pratica di laboratorio n.5
25 e 26 /11/2002 Lezione pratica di laboratorio n.6
27/11/2002 Lez. 34/35 Funzioni di manipolazione files (fopen, fclose, fflush). Concetto di I/O mediante buffer. Sincronizzazione, verifica condizione di EOF (function feof). Lettura e scrittura a caratteri. Lettura e scrittura a linee. Conversioni nelle (...printf). Input (scanf,fscanf,sscanf). Utilizzo delle pagine man su sistemi unix per ottenere informazioni circa le function di libreria.
28/11/2002 Lez. 36/37 Distinzione tra algoritmi numerici e non numerici. Esempio di algoritmo numerico: derivata numerica. Errore di discretizzazione e di arrotondamento. Esempio di struttura dati concreta. Primitive di creazione elemento, aggiunta elemento, scansione ed eliminazione in una lista.