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 ( fprintf
e fscanf ).
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