Diario lezioni

29/9/03 Lez. 1,2 Presentazione del corso. Programma, obiettivi, organizzazione, verifica finale. Basi fisiche della tecnologia binaria degli elaboratori. Gerarchia dei livelli di descrizione: dall' HW alle applicazioni.

30/9/03 Lez. 3,4 Rappresentazione di dati ed istruzioni mediante bit. Cenni alla codifica ASCII. Bytes e parole. Schema di von Neumann di un elaboratore. Memoria, processore, registri, bus, clock. Programmazione in linguaggio macchina.

2/10/03 Lez. 5,6 Passaggio dal linguaggio macchina al linguaggio assembler. Cenni al firmware. Vantaggi di un uso non dedicato delle risorse. Sistema operativo: principali compiti e caratteristiche generali. Time sharing e multiprogrammazione, muliutenza e gestione delle risorse. Accesso alle informazionisu disco. Filesystem UNIX. Nomi dei files. Concetto di directory.

6/10/03 Lez. 7,8,9 (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 e differenze tra text editor e word processor. Comandi apropos e man per accedere alle informazioni relative ai comandi. Navigazione nel filesystem UNIX. Visualizzazione della lista dei processi.

7/10/03 Lez. 10,11,12 (gruppo 2): vedi gruppo 1.

8/10/03 Lez. 13,14: Processo come applicazione caricata nella memoria del processore per l' esecuzione. Pseudofiles associati ad ogni processo (stdin,stdout,stderr). Possibilita' di comunicazione tra processi. Ridirezione e pipes. Cenni alle comunicazioni tra processi via rete. Cenni ai protocolli di rete ed alla loro stratificazione. Esempio di comunicazione tra processi via rete: transazioni tra web browser e web server mediante protocollo HTTP. Comandi della shell come linguaggio di programmazione interpretato.

9/10/03 Lez. 15,16: Costrutti fondamentali per la programmazione procedurale: sequenza/iterazione/salto condizionato. Variabili di shell. Distinzione tra nome e valore delle variabili. Relazioni tra programmi ed algoritmi. Programmi interpretati e compilati. Funzioni del compilatore. Cenni alle classificazioni dei linguaggi di programmazione (imperativi(procedurali, a oggetti)/dichiarativi(logici, funzionali), procedurale/eventi).

13/10/03 Lez. 17,18,19(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.

14/10/03 Lez. 20,21,22(gruppo 2): vedi gr. 1.

15/10/03 Lez. 23,24: Il linguaggio C. Cenni alla storia dell' evoluzione del linguaggio C. Standard ANSI-ISO ed estensioni dello standard. Struttura di un programma C. Ruolo del precompilatore. Elementi del linguaggio: commenti, istruzioni. Dati: costanti, costanti simboliche e variabili. Tipi dati primitivi del C.

16/10/03 Lez. 25,26: Rappresentazione binaria di interi e razionali. Conversioni tra base 2 e 10 e viceversa (richiami). Rappresentazione in base 8 e 16. Costanti numeriche intere e char rappresentate in forma ottale ed esadecimale. Dichiarazione di tipo ed assegnazione. Operatori elementari (+,-,*,/,%,==,!=,<,<=,>,>=, op. unario di cambio segno). Conversione (cast) esplicita ed implicita tra tipi dati. Istruzioni if, if-else e for.

20/10/03 Lez. 27,28,29; (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 e if-else.

21/10/03 Lez. 30,31,32; (gruppo 2): vedi gr. 1.

22/10/03 Lez. 33,34: Costrutti if-else:if annidati - if- else if. Switch-case. Salto incondizionato: goto. Costrutti di iterazione: while e do-while. Istruzioni break. continue ed exit.

23/10/03 Lez. 35,36: Operatori logici. Operatore di assegnazione condizionata. Quadro delle priorita' tra operatori. Esempi di utilizzo. Rappresentazione di interi signed e unsigned sul computer. Aritmetica modulare, rappresentazione con bit del segno e complemento a 2 per interi con segno.

27/10/03 Lez. 37,38,39: 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 come operatore unario. Utilizzo di funzioni della libreria matematica. Aritmetica con tipo dati char. Operatore sizeof e dimensione dei tipi dati e costanti letterali col compilatore gcc. Illustrazione delle proprieta'  dell' aritmetica degli int. Calcolo del fattoriale.

28/10/03 Lez. 40,41,42: (gruppo 2) vedi gr.1.

29/10/03 Lez. 43,44:  Rappresentazione degli interi con bias 127.   Rappresentazione dei 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. Operatori bit-a-bit: &,|,^,~,>>,<<.

30/10/03 Lez 45,46:  Esempi di utilizzo degli operatori bit-a-bit. Concetto, meccanismo ed utilita' di sottoprogrammi. Function C: dichiarazione, definizione e utilizzo. Istruzione return. Passaggio parametri.  Tipo void. Visibilita' dei nomi in un programma, variabili locali e globali.  Function ricorsive.

4/11/03 Lez 47,48,49:  (gruppo 2) Trasformazione di un proramma in una function. Ruolo della dichiarazione (prototipo) e del suo posizionamento.  Visibilita' delle variabili. Utilizzo di variabili globali per ritornare piu' di un valore da una function. Uso del comando time.  Uso  degli operatori bit-a-bit per ricavare la rappresentazione binaria di interi. Verifica delle proprieta' dell' aritmetica tra float. Verifica del valore di ritorno di un programma (main).

5/11/03 Lez 50,51,52: (gruppo 1) v. gr 2.

6/11/03 Lez 53,54: Puntatori ed indirizzi di memoria. Indirizzo di una variabile e indirezione di un puntatore ( operatori & e *). Dichiarazione di puntatori ai vari tipi dati. Costante NULL. Puntatori come argomenti di function. Esempi di utilizzo. Allocazione dinamica della memoria (malloc). Classi di memoria (attributo static).

10/11/03 Lez 55,56,57: (gruppo 1) Utilizzo di puntatori. Indirezione, indirizzo di e puntatori. Esempi di uso di function che utilizzano puntatori.  Cast tra puntatori. Uso di malloc e massima memoria utilizzabile.

11/11/03 Lez 58,59,60: (gruppo 2) v. gr. 1.

12/11/03 Lez 61,62: Tipo "puntatore void".  Allocazione dinamica (malloc,calloc,realloc, free). Aritmetica dei puntatori. Array: dichiarazione e utilizzo. Array a piu' dimensioni. Stringhe. Funzioni di manipolazione di stringhe.  Array e puntatori. Passaggio di array 1D a function.

13/11/03 Lez 63,64: Uso di array bidimensionali e relazioni con array di puntatori e puntatori a puntatori. Array di stringhe. Uso di argomenti della function main.  Strutture: dichiarazione del tipo dati, inizializzazione, utilizzo. Passaggio di strutture a function. Strutture contenenti puntatori. Unioni.

17/11/03 Lez 65,66,67: (gruppo 1) Utilizzo di puntatori ed array. Implementazione di un algoritmo di ordinamento (bubblesort) per titpi numerici e stringhe. Uso di strlen. Definizione ed uso di strutture.

18/11/03 Lez 68,69,70: (gruppo 2) v. gr.1.

19/11/03 Lez 71,72: 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.  Introdizione 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 non formattato e senza buffer ( file descriptor, open,close, write, read ).

20/11/03 Lez 73,74: I/O con buffer non formattato (a livello di carattere, linea e blocco) e formattato (fopen, fclose, fflush, fwrite,fread, ftell, fseek, fputc,putc,putchar,fgetc,getc,getchar,fputs,puts,fgets,gets,fread,fwrite,fprintf,printf,sprintf,scanf,sscanf,fscanf).  Convertitori di formato.

24/11/03 Lez 75,76: (gruppo 1) Utilizzo dei covertitori di formato in lettura e scrittura. Esempio di implementazione  e manipolazione di una lista concatenata mediante strutture.  Lettura e scrittura non formattata. Uso dei costrutti di controllo del precompilatore.

25/11/03 Lez 77,78:(gruppo 2) v. gr. 1.

26/11/03 Lez 78,80:  Ciclo di vita del software e sue fasi. Motivazione e principi della programmazione strutturata. Esempio di progetto software con simulazione delle varie fasi (analisi, disegno, codifica, test e validazione).

27/11/03 Lez 81: Cenni a strumenti di debugging e analisi di efficienza. Discussione del concetto di efficienza del SW. Complementi su  convertitori di formato e sull' uso di array 2D, array di puntatori e puntatori a puntatori per manipolare le stringhe.



e-mail:  pastore@ts.infn.it

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