Diario lezioni

4/10/04 Lez. 1,2 Presentazione del corso. Programma, obiettivi, organizzazione, verifica finale. Accesso all' aula informatica. Utilizzi diversi dell' elaboratore. Basi fisiche della tecnologia binaria degli elaboratori. Bit e byte. Gerarchia dei livelli di descrizione: dall' HW alle applicazioni.

5/10/04 Lez. 3,4 Illustrazione della modalita' di interazione attraverso un' interfaccia grafica e un' interfaccia di linea. Cenni al sistema operativo e interprete di comandi. Rappresentazione di dati ed istruzioni mediante bit. Schema di von Neumann di un elaboratore. Memoria, processore, registri, bus, clock.

6/10/04 Lez.5,6 Files, filesystem e directories. Modalita' di accesso ai file attraverso interfacce grafiche e mediante la shell Unix. Nomi dei files. Linguaggio macchina. Linguaggio assembler. Linguaggi di alto livello e compilatori.

7/10/04 Lez. 7,8 Compilatori ed interpreti. La shell come interprete. Esecuzione di programmi da parte del processore. Uso dedicato o condiviso delle risorse: vantaggi e svantaggi. Sistema operativo: principali compiti e caratteristiche generali. Time sharing e multiprogrammazione, multiutenza e gestione delle risorse. Programmi monolitici e architetture client-server.

25/10/04 Lez. 9,10,11 (gruppo 1): Interfaccia di linea UNIX (bash shell). Principali comandi di linea per: creare directory, cambiare nome, cancellare , listare files e directory. Uso di un text editor. Comandi apropos e man per accedere alle informazioni relative ai comandi. Strutturazione delle informazioni sui comandi (volumi delle man pages). Navigazione nel filesystem UNIX. Visualizzazione della lista dei processi.

26/10/04 Lez. 12,13,14(gruppo 2): vedi gruppo 1.

27/10/04 Lez. 15,16:  Codifica ASCII  per i caratteri.  Pseudofiles associati ad ogni processo Unix (stdin,stdout,stderr). Ridirezione dell' input, output e diagnostica.  Comunicazione tra processi attraverso il meccanismo delle pipes. Linguaggi di programmazione per l' implementazione pratica degli algoritmi.  Cenni alle classificazioni dei linguaggi (Funzionali, Logici, Imperativo-procedurali;   procedurali a oggetti;  programmazione event-driven).

28/10/04 Lez. 17,18: Programmazione procedurale come evoluzione dello stato della memoria - concetto di variabile. Tipi dati primitivi e derivati   e loro utilità. Costrutti fondamentali di sequenza/iterazione/salto condizionato.  Cenni alla storia ed evoluzione del linguaggio C. Standardizzazione del C (C pre-standard, standard 89 e 99). Esempio di struttura di un programma C. Preprocessore, compilatore e linker e loro ruoli.

2/11/04 Lez. 19,20 (gruppo 2), 21,22 (gruppo 1): Esempio di esecuzione di un programma per la shell (script bash). Ciclo editing-compilazione-esecuzione per un semplice programma C contenete istruzioni di I/O. Parametro del compilatore per modificare il nome di default del binario eseguibile. Ridirezione su file dell' output. Semplici modifiche al programma. Verifica di alcune delle anomalie delle caratteristiche dell' aritmetica del computer.

4/11/04 Lez. 23,24: Dati: costanti e variabili. Tipi dati di base del C. Costanti numeriche intere rappresentate in forma decimale, ottale ed esadecimale. Dichiarazione di tipo ed assegnazione. Operatori elementari (+,-,*,/,%, op. unario di cambio segno). Conversione implicita tra tipi dati. Istruzioni if, for.

8/11/04 Lez. 25,26,27 (gruppo 1): Esempi di aritmetica intera, float e conversione implicita tra tipi aritmetici. Conversione tra formato interno e rappresentazioni esterne (descrittori di formato %u, %o,%x ). Operatore unario di incremento e decremento unitario. Cicli for. Uso di costrutti if.

9/11/04 Lez. 28,29,30 (gruppo 2): vedi gruppo 1.

15/11/04 Lez. 31,32,33 (gruppo 1):  Assegnazione come operatore binario. Conversione implicita e cast esplicito. Costrutti if-else:if annidati - if- else if. Switch-case. Operatore di assegnazione condizionata. Trasformazione di un costrutto if-else  in   switch-case.  Implementazione di un algoritmo iterativo per il calcolo della radice quadrata. Uso dell' operatore di assegnazione condizionata e del cast esplicito. Utilizzo di funzioni della libreria matematica. Aritmetica con tipo dati char.  Operatore e dimensione dei tipi dati e costanti letterali col compilatore gcc. Illustrazione delle proprieta'  dell' aritmetica degli  interi. Calcolo del fattoriale.

16/11/04 Lez. 34,35 (gruppo 2): vedi gruppo 1.

17/11/04 Lez. 36,37: Costrutti iterativi while e do-while. Istruzioni break e continue.  Conversioni tra base 2 e 10 e viceversa (richiami). Rappresentazione di interi signed e unsigned sul computer: aritmetica modulare, rappresentazione con bit del segno, complemento a 2  e bias 127  per interi con segno.

18/11/04 Lez. 38,39:  Rappresentazione in base 8 e 16.  Rappresentazione dei numeri  con virgola  in  base 2. Conversione tra base 2 e 10  per numeri con virgola. Standard IEE754/IEC60559: numeri normalizzati, denormalizzati e valori eccezionali. Aritmetica floating point e conseguenze sulle proprieta' algebriche dei reali rappresentati sul computer.

22/11/04 Lez. 40,41,42 (gruppo 1):  Operatori   bit a bit.  Uso e trasformazioni di costrutti di salto condizionato e di iterazione. Utilizzo degli operatori bit a bit per ricavare la sequenza di bit di una variabile intera.  Determinazione empirica della precisione relativa di tipi float. Non  associatività  dell' aritmentica floating point. Convergenza della successione  (1 + 1/n)^n  alla costante di Nepero e:  possibili problemi con la verifica della condizione di uguaglianza tra quantità  float.

23/11/04 Lez. 43,44,45 (gruppo 2): vedi gruppo 1.

24/11/04 Lez. 46,47:  Precisione relativa dei  tipi float e double.  Function C: dichiarazione, definizione e utilizzo. Prototipi  e loro utilizzo da parte del compilatore.  Istruzione return.  Passaggio parametri.  Tipo void.  Function ricorsive.

25/11/04 Lez. 48,49:   Complementi sulle function ricorsive; costo computazionale della ricorsione.  Function come strumento di programmazione modulare. Compilazione di più  function  presenti nello stesso file o in file separati. Creazione separata dei files binari oggetto e linking successivo.  Variabili locali e globali. Visibilita' dei   nomi relativamente alla loro collocazione nei blocchi.  Classi di memoria nella dichiarazione delle variabili: classi  registerauto.

29/11/04 Lez. 50,51:   Classi di memoria. Trasformazione di un programma in un programma con function. Ordine di apparizione delle function in fase di compilazione. Compilazione unita e separata di function. Visibilita' delle variabili. Variabili automatiche e statiche. Function per risolvere la generica equazione di secondo grado. Successione di Fibonacci. Verifica dei tempi di esecuzione.

1/12/04 Lez. 52,53:   esercizi con puntatori. Operatori di indirezione e "indirizzo di". Utilizzo di argomenti per passare risultati. Inizializzazione dei puntatori.

2/12/04 Lez. 54,55:   Costanti simboliche (qualificatore const nelle dichiarazioni C o #define col pre-compilatore). Arrays C. Stringhe. Inizializzazione, I/O e utilizzo di arrays e stringhe. Sfondamento di indici. Aritmetica dei puntatori. Allocazione dinamica (malloc, calloc, realloc, free).

6/12/04 Lez. 56,57:   Libreria di funzioni per la manipolazione di stringhe (string.h). Array a più dimensioni. Puntatori a puntatori. Scansione di stringhe. Utilizzo della classe di memoria extern per accedere a variabili globali in function residenti in files diversi da quello in cui sono dichiarate le variabili globali. Passaggio di array a function. Implementazione dell' algoritmo bubblesort.

7/12/04 Lez. 58,59,60:  Unioni e strutture: dichiarazione del tipo dati, inizializzazione, utilizzo. Passaggio di strutture a function. Strutture contenenti puntatori.  Utilizzo dei covertitori di formato in lettura e scrittura. Esempio di implementazione  e manipolazione di una lista concatenata mediante strutture.

9/12/04 Lez. 61,62: Istruzioni per il preprocessore:  definizione di macro  con argomenti. Costrutti di controllo del preprocessore ( #if -#elif -  #else- #endif, #if defined - #ifdef - #ifndef - #undef ) .  Definizione e annullamento di macro mediante opzioni del compilatore.  Introduzione all' I/O in C.  Operazione di connessione a file esterni. Tipi di I/O: con e senza buffer - formattato e non formattato. I/O con buffer non formattato (a livello di carattere, linea e blocco) e formattato (fopen, fclose, fwrite,fread,  fputc,putc,putchar,fgetc,getc,getchar,fputs,puts,fgets,gets,fread,fwrite,fprintf,printf,sprintf,scanf,sscanf,fscanf).



e-mail:  pastore@ts.infn.it

Department of Theoretical Physics, University of Trieste, Italy - Home-page