Diario lezioni

2/10/2006 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. Richiami sulla notazione posizionale in base 10 e in base 2.

3/10/2006 Lez. 3,4:  Gerarchia dei livelli di descrizione dell' elaboratore. Schema di von Neumann di un elaboratore. Memoria, processore, registri, bus, clock. 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.

4/10/2006 Lez. 5,6:  Uso dedicato o condiviso delle risorse. Sistema Operativo: compiti e caratteristiche generali. Caratteristiche dei S.O. moderni (multitasking, multiutenza, time sharing e job scheduling). Introduzione al Filesystem. Files e directories. Attributi dei files (nomi, permessi, proprietario).

5/10/2006 Lez. 7,8:  Interfacce. I. di linea e grafiche. Interprete di comandi. Architetture client server. Ciclo di vita del SW (Problema, analisi con esempio sulla soluzione della generica eq. di secondo grado). Requisiti basilari per gli algoritmi.

9/10/2006 Lez. 9,10:  Cenni alle principali classificazioni dei linguaggi di programmazione. Tipi dati. Linguaggi imperativi, dichiarativi, logici, funzionali. Storia del linguaggio C. Primo esempio di programma C: principali strutture sintattiche. 10/10/2006 Lez 11,12:  (Gr1): Utilizzo dell' interfaccia grafica Solaris er accedere all' interprete di comandi (shell). Comando ls per listare file e i contenuti delle directory. Sintassi generale dei comandi di shell. Opzioni e parametri. Files nascosti. Attributi dei files. Alcuni comandi di uso frequente (pwd,cd, cat). Text editors e word processors. Creazione di files e loro salvataggio mediante l' editor Nedit. Modalità di accesso al browser netscape.

11/10/2006 Lez 13,14:  (Gr2): vedi 10/10.

12/10/2006 Lez 15,16  Pseudofiles associati ad ogni processo Unix (stdin, stdout, stderr), ridirezione di stdin e stdout, meccanismo delle pipes. Strutturazione delle man pages (volumi). Comando per cancellare files (rm) e modo d' uso. Caratteri jolly (wildcharacters). 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. Caratteri, codifica ASCII e cenni all' esistenza di alternative (EBCDIC, Unicode).

16/10/2006 Lez 17,18  (Gr.1): uso dei comandi apropos e man per ottenere informazioni sui comandi dell' interprete di linea. Comandi per cancellare files (rm), cambiar nome (mv) e copiare (cp). Visualizzazione della lista dei processi (ps). Variabili di shell. Esempio di shell script come programma in linguaggio interpretato. Creazione e compilazione di un semplice programma C.

18/10/2006 Lez 19,20  (Gr.2): vedi 16/10.

19/10/2006 Lez 21,22  Rappresentazione posizionale in base 8 e 16. Passaggio da base 10 a ottale ed esadecimale e viceversa. Conversione tra base 16 e base 2 e viceversa. Rappresentazione degli interi senza segno e degli interi con il segno. Rappresentazione dei negativi col bit del segno, complemento a due e bias B. Proprieta' congruenziali modulo 2n dell' artimetica intera a n bit. Equivalenza tra somme e sottrazioni nella rappresentazione complemento a due. Rappresentazione binaria dei numeri razionali. Passaggio tra base 10 e base 2. Periodicita' in base 2 di numeri che hanno una rappresentazione finita in base 10.

23/10/2006 Lez 23,24  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. Operatori C e loro classificazione in funzione del numero di operandi. Operatori aritmmetici binari (+,-,*,/,%) e loro precedenza. Uso delle parentesi. Operatori unari +,-. Rango degli operandi e conversione implicita. Cast esplicito.

24/10/2006 Lez 25,26  (Gr.1) 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. Semplici modifiche al programma. Parametri del compilatore (-std=, -pedantic, -c ). Modalita' di funzionamento del compilatore gcc (preprocessore, compilatore e linker). Esercizi sulla conversione implicita tra tipi dati. Operatori di confronto (<,>,<=,>=,==,!=).

25/10/2006 Lez 27,28  (Gr.2) vedi 24/10

26/10/2006 Lez 29,30  Costanti di stringa. Operatori C e loro classificazione in funzione del numero di operandi. Operatori aritmmetici binari (+,-,*,/,%) e loro precedenza. Uso delle parentesi. Associatività. Convertitori di formato %i, %o, %x. Costanti letterali intere ottali ed esadecimali. Operatore ternario di assegnazione condizionata. 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. Operatore virgola. Istruzione nulla. Blocchi di istruzioni.

30/10/2006 Lez 31,32  Commenti C ( standard 89 e 99 )   e documentazione dei programmi. Costrutto  if-else.  Costrutti di salto condizionato: if-else e if-else annidati.  Indentazione  e leggibilità  dei codici.   Costrutti di iterazione.   Istruzioni che rompono la sequenza di iterazioni: break. Altri costrutti di iterazione: while e do-while. Salto incondizionato (goto e label di istruzioni).

31/10/2006 Lex. 33,34 Programmazione strutturata e goto. Simulazione di in costrutto if-else if   mediante if-else annidati. Istruzione switch-case. Istruzione continue.  Esempio:  calcolo di una somma doppia col vincolo di  avere indici diversi. Function C: dichiarazione  e  utilizzo. Protoripi   e  meccanismo  del passaggio dei parametri e  del ricevere il valore di ritorno. Function come tipo dati derivato.

6/11/2006 Lez. 35,36  Uso dei file di header per raccogliere i prototipi. Include di file di header di sistema o costruiti dall' utente. Compilazione separata di function. Creazione separata dei files binari oggetto e linking successivo. Effetto della non inclusione dei prototipi. Definizione di una function. Valore di ritorno ed istruzione return. Valore di ritorno della function main. Tipo void. Function come strumento di programmazione modulare. Variabili locali e globali. Visibilita' dei simboli di un programma e classi di memori (auto, static, external, register). Inizializzazione di variabili in classe auto e static.

7/11/2006 Lez. 37,38   (Gr. 1) 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. Somme di sequenze di interi. Operatore di incremento unitario. Ristrutturazione e semplificazione di un doppio costrutto if.

8/11/2006 Lez. 39,40   (Gr. 2) vedi 7/11

9/11/2006 Lez. 41,42   Algoritmi ricorsivi e uso ricorsivo delle function C. Esempi: fattoriale di un intero e scrittura in ordine inverso dei caratteri di una riga. Il problema dell' ordinamento e l' utilità di introdurre il tipo derivato array. Dichiarazione di array e limiti di variabilità per l' indice.

13/11/2006 Lez. 43,44   Istruzione define per il precompilatore. Inizializzazione ddegli array. Determinazione del numero di componenti mediante l' operatore sizeof. Array di array e matrici. Stringhe come array di caratteri terminati dal carattere nullo. Operatore indirizzo di (&). Rappresentazione degli indirizzi e convertitore di formato %p. Variabili di tipo dati puntatore:  dichiarazione, assegnazione e  operatore di indirezione.

14/11/2006 Lez. 45,46   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. Particolarità dell' implementazione degli interi sul computer: esperimenti diretti.

15/11/2006 Lez. 47,48   (Gr.2) vedi 14/11.

16/11/2006 Lez 49,50   Tipo puntatore void. Aritmetica dei puntatori. Uso di puntatori per simulare il passaggio "per indirizzo" di parametri formali di function. Allocazione dinamica della memoria (function malloc, free).

20/11/2006 Lez 51,52   Function calloc, realloc. Cenni ai metodi di allocazione di memoria da parte del sistema operativo. Uso di array nei parametri formali delle function e decadimento a puntatori. Utilizzo di typedef per definire un nuovo nome per tipi dati. Strutture. Definizione di strutture, dichiarazioni, definizioni e inizializzazione di variabili di tipo strutura. Accesso ai campi di una struttura. Strutture anonime. Uso di strutture con function.

21/11/2006 Lez 53,54   (Gr.1)  Compilazione di function in file indipendenti. Semplici esercizi con i puntatori. Dimensioni dei tipi puntatore. Utilizzo di array.  Implementazione dell' algoritmo Bubblesort.

22/11/2006 Lez. 55,56 (Gr.2)  vedi 21/11.

27/11/2006 Lez. 57,58 Utilizzo di strutture nelle function.  Puntatori a struttura. Unioni. Stringhe e array di caratteri.  Funzione strcpy  e sua possibile implementazione.

28/11/2006 Lez. 59,60 (Gr.1) Esercizi su puntatori, array e stringhe. Prodotto di matrici quadrate. Copia di stringhe. Uso di strcpy e strlen. Allocazione dinamica della memoria. Differenza tra puntatori ed array. Definizione ed uso di strutture.

29/11/2006 Lez. 61,62 (Gr.2) vedi 28/11.

30/11/2006 Lez. 63,64 Principali funzioni di manipolazione di stringhe. Uso di strtok. Implementazione di strlen ed uso del terminatore di stringa per effettuarne la scansione. Convertitore di formato %s. Lettura di stringa mediante buffer e allocazione dinamica della memoria. su cui ricopiare la stringa del nuffer.

4/12/2006 Lez. 65,66 Array di puntatori per rappresentare array di stringhe. Puntatori a puntatori. Puntatori a vettori e matrici. Puntatori a funzioni. Dichiarazioni complesse.

5/12/2006 Lez. 67,68 (Gr.1) Modifica del programma bubblesort per interi per ordinare stringhe secondo l' ordine lessicografico.  Uso della funzione strtok. Utilizzo di strcpy, strutture e puntatori a struttura.

6/12/2006 Lez. 69,70 (Gr.2)  vedi 5/12

7/12/2006 Lez.71,72  Dichiarazioni complesse di tipo dati.  Input-output in C. Stream e  collegamento di periferiche di I/O  ad  uno stream. Utilizzo di fopen/fclose.  Buffer associati agli stream. I/O  orientato a carattere,   linea,  blocco.  Uso  delle più  frequenti function di IO,

11/12/2006 Lez.73,74  I/O  formattato. printf, fprintf, sprintf, scanf, fscanf, ssprintf.  Convertitori di formato.

12/12/2006 Lez. 75,76   (Gr.1) Uso del parametro di campo massimo nei  descrittori di formato per la lettura di stringhe (scanf). Uso di scanf, fscanf, sscanf,  getchar, putchar. Manipolazione dell' input   a  un carattere per volta.

13/12/2006 Lez. 77,78   (Gr.2)  vedi 12/12

14/12/2006 Lez. 79,80  Prototipi di main. Uso della lista degli argomenti.  Strutture dati astratte e loro implementazione in C. Esempio:  vettore. Liste concatenate:  definizione, implementazione, creazione della lista,  conteggio dei nodi.

18/12/2006 Lez. 81,82 Liste concatenate: aggiunta e  cancellazione di un nodo.  Function di manipolazione.

19/12/2006 Lez. 83,84
Cenni all' uso del debugger attraverso l' interfaccia grafica ddd. Accesso ai parametri della linea di comando attraverso gli argomenti di main. Esempio di implementazione di una linked list. Modifica delprogramma relativo alla lista concatenata per definire e gestire una lista dopiia.
20/12/2006 Lez. 85,86
(Gr 2) v. 19/12.



e-mail:  pastore@ts.infn.it

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