Diario lezioni

3/10/2005 Lez. 1,2:  Presentazione del Corso.  Programma, obiettivi, organizzazione, verifica  finale.  Accesso all' aula informatica. Utilizzi diversi dell' elaboratore.  Bit, byte  e  multipli. Basi fisiche della tecnologia binaria degli elaboratori. Gerarchia dei livelli di descrizione dell' elaboratore. Schema di von Neumann di un elaboratore. Memoria, processore, registri, bus, clock.

4/10/2005 Lez. 3,4:  Rappresentazione di dati ed istruzioni in memoria. Schema di esecuzione di un programma (Program Counter, decodifica di istruzioni). Linguaggio macchina. Linguaggio assembler. Linguaggi di alto livello. Compilatori ed interpreti. Uso dedicato o condiviso delle risorse. Sistema Operativo: compiti e caratteristiche generali. Introduzione al Filesystem.

5/10/2005 Lez. 5,6:  Filesystem: files e directories. Attributi dei files (nomi, permessi, proprietario). Gerarchia dei livelli nella descrizione dell' elaboratore: dall' hardware alle applicazioni. Caratteristiche dei S.O. moderni (multitasking, multiutenza, time sharing e job scheduling). Interfacce. I. di linea e grafiche. Processi. Architetture client server. Cenni alle reti, dall' HW ai protocolli software. Cenni alla storia del linguaggio C.

6/10/2005 Lez. 7,8:  Ciclo di vita del SW (Problema, analisi, codifica, validazione e debugging, rilascio, manutenzione ed evoluzione). Esempio: risolvere equazioni di secondo grado. Cenni alle principali classificazioni dei linguaggi di programmazione. Primo esempio di programma C: principali strutture sintattiche. Preprocessore.

11/10/2005 Lez. 9,10:  Interfaccia grafica e interfaccia di linea sui server Solaris. Finestra terminale e shell. Prompt. Bash shell: corrispondenza tra comandi e nomi di files eseguibili. Path. Comandi per ottenere la directory corrente (pwd) e la lista dei files presenti nella directory (ls).  Aiuto on-line.
Strutturazione  delle man pages (volumi).  Comando man e struttura dell' informazione ricavabile.

12/10/2005 Lez. 11,12:  Interfaccia di linea: principali comandi per creare directory, listare i file e ricavarne i principali attributi e proprietà. Comando apropos (man -k ) e tecniche di utilizzo per recuperare informazioni su comandi di linea. Navigazione nel filesystem UNIX. Tipo di files. Editor e word processors. File di testo. Uso di un editor di testi. Visualizzazione di file di testo e di file binari.

13/10/2005 Lez. 13,14: Comandi per cancellare files (rm),  cambiar nome (mv)  e copiare (cp). Meccanismo degli alias della shell. Path assoluti e relativi. Caratteri jolly (wildcharacters). Visualizzazione della lista dei processi (ps)  e informazioni sull' Hardware  (top).  Cenni, orientati all' attivita' di programmazione, alla memoria virtuale (swap),  gerarchia di memorie,  gestione da parte del S.O.. Pseudofiles associati ad ogni processo Unix (stdin, stdout, stderr),  ridirezione di stdin e stdout,  meccanismo delle pipes.

17/10/2005: Lez. 15,16:  Rappresentazione dei dati.  Caratteri,  codifica ASCII e cenni all' esistenza di alternative (EBCDIC, Unicode). Rappresentazione degli interi assoluti e relativi. Cenni all' implementazione delle operazioni aritmetiche.  Proprietà  della rappresentazione degli interi (cenni all' aritmetica modulare).  Rappresentazione degli interi negativi:  forma del complemento a due.  Limiti per gli interi in funzione del numero di byte utilizzati per la rappresentazione.

18/10/2005: Lez. 17,18:   Rappresentazione degli interi nella forma con "bias". Conversione da decimale a binario per numeri non interi. Standard IEEE754 per la rappresentazione dei numeri non interi (floating point). Caso di rappresentazioni a 32 e 64 bit. Minimo e massimo valore floating point, normalizzato e denormalizzato. Codifica dei denormalizzati speciali (+- Inf e NaN). Non uniformita' della distribuzione dei floating point.

19/10/2005: Lez. 19,20:   Sistemi di codifica ottale ed esadecimale per le seguenze di bit. Interconversione. Esempio di shell script come programma in linguaggio interpretato. Variabili di shell. Ciclo editing-compilazione-esecuzione per un semplice programma C contenente istruzioni di I/O. Parametro del compilatore per modificare il nome del file binario eseguibile. Ridirezione dell' output su file. Semplici modifiche al programma.

20/10/2005: Lez. 21,22:  Parametri del compilatore (-std=, -pedantic, -c ). Modalità  di funzionamento del compilatore gcc (preprocessore, compilatore e linker). Dati: costanti e variabili. Significato dei nomi simbolici dei dati per il compilatore. Necessità  di dichiarare i tipi dati. Tipi dati di base del C (Standard 99).

24/10/2005: Lez. 23,24:  Implementazione dei tipi dati. Operatore sizeof. Dichiarazione di tipi dati per variabili e  costanti simboliche.  I tipi dati delle costanti letterali (intere decimali, ottali, esadecimali, long, longlong, unsigned, float, long double). Costanti di carattere. Caratteri speciali e carattere di escape (\). Costanti di stringa.  Operatori C e loro classificazione in funzione del numero di operandi. Operatori aritmmetici  binari (+,-,*,/,%) e loro precedenza. Uso delle parentesi. Associatività. Operatori unari +,-.  Operatori di confronto (<,>,<=,>=,==,!=). Operatore di assegnazione.  Rango degli operandi e conversione implicita.

25/10/2005: Lez, 25,26:  Esercizi sulla conversione implicita tra tipi dati (Esercitazione  n.3). Conversioni decimale/ASCII e tra rappresentazioni diverse degli interi (decimale¸ ottale,  esadecimale) mediante i convertitori di formato %i, %o, %x. Cast esplicito.  Operatore ternario di assegnazione condizionata.  Conversione tra caratteri alfabetici maiuscoli e minuscoli.

26/10/2005: Lez, 27,28:  Sintassi generale del ciclo for. Istruzione nulla.  Operatore vircola.  Rappresentazione numerica di vero e falso in C.  Operatori logici e tabelle di verità. Valutazione cortocircuitata di espressioni logiche.  Operatori unari di incremento e decremento unitario,  in versione post-  e  pre-fissa. Costrutto  if-else

27/10/2005: Lez. 29,30:  (Esercitazione n. 4) Esempi di cicli for.  Somma dei primi 10 interi. Esercizi sull' operatore di incremento unario. Ristrutturazione di condizioni if.

7/11/2005: Lez. 31,32:  Sintassi per i commenti (standard 89 e 99). Costrutti di salto condizionato: if-else e if-else annidati. Simulazione di un if-else if mediante if annidati. Istruzione switch-case. Sato incondizionato (goto e label di istruzioni). Programmazione strutturata e goto. Costrutti di iterazione. Istruzioni che rompono la sequenza di iterazioni: break e continue. Altri costrutti di iterazione: while e do-while.

9/11/2005: Lez. 33,34:  (Esercitazione n.5) Trasformazione di un costrutto if-else in uno switch-case.  Implementazione di un algoritmo per il calcolo della radice quadrata (algoritmo di Newton). Conversione tra caratteri maiuscoli e minuscoli.

10/11/2005: Lez. 35,36: (Esercitazione n. 5)  Particolarità  dell' implementazione degli interi sul computer: esperimenti diretti. Aritmetica floating point e precisione relativa. Conseguenze sulle proprietà  delle operazioni aritmetiche tra tipi relai sul computer (non associatività).

14/11/2005: Lez. 37,38:
Function C: dichiarazione, definizione e utilizzo. Prototipi e loro utilizzo da parte del compilatore. Istruzione return. Passaggio parametri. Tipo void. 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 simboli di un programma e classi di memoria. Function ricorsive.

15/11/2005: Lez. 39,40:
(Esercitazione n.6) 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. Classi di memoria: auto,  static,  register e  extern.

16/11/2005: Lez. 41,42:
Inizializzazione di variabili in classe auto e static. Successione di Fibonacci: implementazione ricorsiva e iterativa. Verifica dei tempi di esecuzione.

17/11/2005: Lez. 43,44: Operatore indirizzo di (&).  Rappresentazione degli indirizzi e convertitore di formato %p. Variabili di tipo dati puntatore:  dichiarazione, assegnazione e  operatore di indirezione. Uso di puntatori per simulare il passaggio "per indirizzo"  di parametri formali di function.
Semplici esercizi sui puntatori (Esercitazione n.7).

21/11/2005: Lez. 45,46:  Uso del preprocessore per definire costanti simboliche. Istruzione typedef. Tipo derivato array. Dichiarazione, inizializzazione, uso nelle espressioni di array. Il problema della verifica degli indici. Array multidimensionali. Allocazione dinamica della memoria (function malloc, calloc, realloc, free).

22/11/2005: Lez. 47,48:  Aritmetica dei puntatori. Esercitazione n. 8. Stringhe.

23/11/2005: Lez. 49,50:  Array come argomenti formali. Analogie e differenze tra puntatori e array. Uso dell' istruzione sizeof per ricavare il dimensionamento di un array. Esercitazione n. 8 (continuazione).

24/11/2005: Lez. 51,52:  Esercitazione n.8 (continuazione). Inizializzazione di matrici. Funzioni di libreria per la manipolazione delle stringhe (strcpy, strcmp e strcat).

28/11/2005: Lez. 53,54:  Operatori orientati ai bit: complemento, AND, OR e XOR,  operatori di shift. Esempio: determinazione della sequenza di bit di tipi interi e reali. Unioni e strutture.  Dichiarazione,  inizializzazzione,  accesso ai campi.

29/11/2005: Lez. 55,56: Esercitazione n.8 (continuazione). Bubblesort per array numerici e di stringhe. Passaggio di stringhe come argomenti.

30/11/2005: Lez. 57,58:  Puntatori a strutture ed accesso ai corrispondenti campi.  Function strtok. Esercitazione n. 9: utilizzo di strutture. Esempi di utilizzo di strtok.

1/12/2005: Lez. 59,60:  Esercitazione n. 9 (continuazione): utilizzo di strutture. Strutture con puntatori. Allocazione dinamica in presenza di strutture con puntatori.

5/12/2005: Lez. 61,62:  Complementi su puntatori ed array: puntatori a stringhe costanti  e  costanti puntatore a carattere. Array bi-dimensionali,  array di puntatori e puntatori ad array.

6/12/2005: Lez. 63,64: Array di puntatori a caratteri  ed array di stringhe.  Argomenti di main.  Puntatori a funzione.  Dichiarazioni complesse di tipo dati.

7/12/2005: Lez. 65,66: Esercitazione n. 10. Array di puntatori a carattere. Estrazione dei parametri di un comando.

12/12/2005: Lez. 67,68:  Esempio di implementazione di una lista concatenata, strutture dati   e function di manipolazione.  Definizione di macro con argomenti.  Test di macro del precompilatore. Definizione e cancellazione di macro mediante parametri da linea di comando del compilatore gcc. Accesso a files dall' interno di programmi C. Struttura dati FILE. Istruzioni fopen e fclose.  Lettura e scrittura con conversione ( fprintffscanf ).

13/12/2005: Lez. 69,70:  Modalità  di apertura di un file. 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). Cenni alle funzioni ausiliarie (setvbuf, fflush, fseek, ftell, rewind, feof, clearerr ).

14/12/2005: Lez.71,72:  Esercitazione n. 11. Uso di alcune funzioni di I/O.

15/12/2005: Lez.73,74:  Esercitazione n. 11. Esempi di problemi ed esercizi di esame.



e-mail:  pastore@ts.infn.it

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