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