Diario lezioni
1/10/2007 Lez. 1,2: Presentazione del Corso. Programma,
obiettivi, organizzazione, verifica finale. Accesso all' aula
informatica. Basi fisiche della tecnologia binaria degli elaboratori.
Richiami sulla
notazione posizionale in base 10 e in base 2. Codifica binaria dei
caratteri.
2/10/2007 Lez. 3,4:
Bit, byte e multipli. 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 ed altissimo livello.
4/10/2007 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.
8/10/2007 Lez. 7,8:
Introduzione al Filesystem. Files e directories. Attributi dei files
(nomi, permessi, proprietario). Interfacce. I. di linea e grafiche.
Interprete di comandi.
Ciclo di vita del SW (Problema, analisi con esempio sulla soluzione
della generica eq. di secondo grado). Requisiti basilari per gli
algoritmi.
9/10/2007 Lez. 9,10:
Utilizzo del sistema di calcolo dell' aula informatizzata. Accesso all'
interprete di comandi (bash). visualizzazione del filesystem mediante
interfaccia grafica e mediante interfaccia di linea. Permessi dei file.
Editor di testi e creazione/modifica di file (uso di Nedit).
Interpretazione dei comandi da parte della shell. Esempio di comando,
parametri e opzioni.
11/10/2007 Lez. 11,12: Alcuni comandi della shell di uso
frequente (ls, rm, cp, mv, cd, cat e more). La shell come linguaggio di
programmazione (variabili di shell e cenni all' esistenza di istruzioni
di controllo). Cenni alla varietà di linguaggi di
programmazione. Produzione del SW: analisi del "lato problema"
e individuazione degli algoritmi (esempi: ordinamento di
parole e soluzione dell' equazione generica di secondo grado nel campo
dei reali). Concetto di tipo dati. Cenni alla storia del C.
12/10/2007 Lez. 13,14: Necessità e
utilità della standardizzazione dei linguaggi di
programmazione. Standard del C. Struttura generale dei programmi
C come insieme di function cooperanti. Struttura di massima di
una function C (nome, argomenti, tipo dati del valore di ritorno
e corpo della function. Esempio di un programma C e prima
discussione di alcune strutture sintsttiche. Compilatori ed
interpreti. Struttura del compilatore C (preprocessore,
compilatore e linker). Cenni alle funzionalità del linker
(risoluzione degli externals, rilocazione relativa ) e del
loader (rilocazione finale).
15/10/2007 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). Uso dei comandi apropos e man per ottenere
informazioni sui comandi dell' interprete di linea. Visualizzazione
della lista dei processi (ps). Caratteri jolly (wildcharacters).
16/10/2007 Lez. 17,18:
Caratteristiche del processore e dei processi rilevabili attraverso il
comando top. Ciclo di editing, salvataggio,compilazione,
verifica dei risultati.
File binari e loro visualizzazione. Rappresentazione in base 8 e 16 e
conversione di qesta da e per base 2.
18/10/2007 Lez. 19,20: 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.
19/10/2007 Lez.21,22: 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.
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. Tipi dati
primitivi del C.
22/10/2007 Lez. 23,24:
Dichiarazioni dei tipi dati. Cenni alle function di I/O scanf
e printf, alle costanti di stringa, ai convertitori di
formato e all' operatore unario "indirizzo di". Tipi dati di default
delle costanti. Modificatore f per costanti float. Espressioni.
Operatore di assegnazione. Operatori aritmetici (+,-,*,/,%) e loro
precedenza. Associatività e parentesi. Operatori di confronto
aritmetico. Conversioni (cast) implicite ed esplicite. Modificatore per
costanti letterali di tipo double. Operatore sizeof. Cenni
all' istruzione if.
23/10/2007 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. Costanti letterali
intere ottali ed esadecimali.
25/10/2007 Lez. 27,28:
Costrutto if-else. Rappresentazione numerica di vero e falso in C.
Costrutti di salto condizionato: if-else e if-else annidati.
Simulazione di in costrutto if-else if mediante if-else annidati.
Istruzione switch-case. Istruzione continue. Operatore ternario ?: .
Indentazione e leggibilità dei codici. Costrutti di
iterazione: il ciclo ifor.. Istruzioni che rompono la sequenza
di iterazioni: break e continue. Altri costrutti di iterazione: while e
do-while. Salto incondizionato (goto e label di istruzioni). Operatori
unari di incremento e decremento unitario, in versione post- e
pre-fissa. Operatore virgola. Istruzione nulla. Blocchi di istruzioni.
26/10/2007 Lez. 29,30:
Programmazione strutturata e goto. Commenti. Operatori logici e tabelle
di verità . Valutazione cortocircuitata di espressioni logiche.
Function C: dichiarazione e utilizzo. Prototipi e meccanismo del
passaggio dei parametri e del ricevere il valore di ritorno. Uso dei
file di header per raccogliere i prototipi. Include di file di header
di sistema o costruiti dall' utente. 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.
30/10/2007 Lez. 31,32:
(Laboratorio) Somme di sequenze di interi. Operatore di incremento
unitario. Ristrutturazione e semplificazione di un doppio costrutto if.
Cicli for.
6/11/2007 Lez. 33,34:
(Laboratorio) Conversione di un costrutto if-else in switch-case.
Implementazione dell' algoritmo di Newton per il calcolo della radice
quadrata. Conversione caratteri (minuscoli-maiuscoli). Aritmetica con
tipi interi diversi. Function per il calcolo del fattoriale. Classi di
memoria.
8/11/2007 Lez. 35,36:
Istruzione define per il precompilatore. Inizializzazione ddegli array.
Determinazione del numero di componenti mediante l' operatore sizeof.
Operatore indirizzo di (&). Rappresentazione degli indirizzi e
convertitore di formato %p. Variabili di tipo dati puntatore:
dichiarazione, assegnazione e operatore di indirezione.
12/11/2007 Lez. 37,38:
(Laboratorio, schema 6) Compilazione indipendente di function in file
diversi. Uso e scrittura di puntatori. Puntatori come argomento di
function. Puntatori non inizializzati. Aritmetica dei puntatori. Uso di
array.
13/11/2007 Lez. 39,40:
(Laboratorio) Stringhe come array terminati dal carattere nul.
Convertitore di formato %s. Funzioni di libreria per manipolare le
stringhe.
Implementazione dell' algoritmo bubblesort.
15/11/2007 Lez. 41,42:
Tipo puntatore generico (void *). Allocazione dinamica della memoria
(function malloc, calloc, realloc, free). Considerazioni sull'
efficienza. Memory leaks
19/11/2007 Lez. 43,44:
(Laboratorio) Esercizi su puntatori, array e stringhe.
20/11/2007 Lez. 45,46:
(Laboratorio) Esercizi su puntatori, array e allocazion dinamica.
22/11/2007 Lez. 47,48:
Array di puntatori e array di stringhe. Array bidimensionali come array
di array. Sintassi di array e sintassi di puntatore.
26/11/2007 Lez. 49,50:
(Laboratorio) Stringhe e token. Uso della funzione di libreria strtok per la ricerca di token in
stringhe. Manipolazioni di matrici numeriche.
27/11/2007 Lez. 51,52:
(Laboratorio) Modifica del programma bubblesort per
interi per ordinare stringhe secondo l' ordine lessicografico.
Esercizi su matrici e Passaggio di matrici a funzioni.
29/11/2007 Lez. 53,54:
Funzione di libreria strcmp,
interfaccia e utilizzo. Matrici dinamiche e puntatori a puntatori a
carattere. Prototipi standard di main.
Uso della lista degli
argomenti. Puntatori a funzione.
3/12/2007 Lez. 55,56:
(Laboratorio) 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.
Utilizzo di typedef per definire un nuovo nome per tipi dati.
Utilizzo di strutture nelle function.
Puntatori a struttura. Unioni. Esercizi su array a due indici
e puntatori a puntatori.
4/12/2007 Lez. 57,58:
(Laboratorio) Esercizi su strutture e unioni. Allocazione di
memoria per strutture e campi di strutture.
6/12/2007 Lez. 59,60:
Definizione di macro con argomenti. Test sulla definizione di macro.
Salti condizionati per il precompilatore. Definizione di macro
attraverso parametri di compilazione. Accesso a files dall' interno di
programmi C. Struttura dati FILE. Istruzioni fopen e fclose.
Modalità di apertura di un file. Tipi di I/O: con e senza buffer
- formattato e non formattato.
7/12/2007 Lez. 61,62:
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 ). Lettura e
scrittura con conversione ( famiglie della printf e scanf ).
Convertitori di formato per printf e scanf.
10/12/2007 Lez. 63,64:
(Laboratorio) Esercizi su funzioni di libreria per l' I/O.
11/12/2007 Lez. 65,66:
(Laboratorio) Esercizi su convertitori di formato della printf e scanf.
13/12/2007 Lez. 67,68:
Strutture dati astratte e loro implementazione in C. Esempio: vettore.
Liste concatenate: definizione, implementazione della struttura dati
mediante struttura e puntatore alla stessa struttura, creazione della
lista, alternative di implementazione.
14/12/2007 Lez. 69,70:
Liste concatenate: aggiunta e cancellazione di un nodo. Function di
manipolazione.
17/12/2007 Lez. 71,72:
Elaborazione di input formattato. Esercizi su I/O formattato.
18/12/2007 Lez. 73,74:
Uso del debugger gdb mediante interfaccia grafica ddd. Passaggio di
parametri a main. Esempio di implementazione di lista concatenata
semplice.
20/12/2007 Lez. 75,76: Metodologie di programmazione.
Programmazione strutturata: modularizzazione, information
hiding, disegno top-down o bottom-up. Limiti dell' approccio. Cenni
alle caratteristiche delle metodologie object-oriented. Classi,
oggetti, ereditarietà, polimorfismo. Evoluzione
dalla struttura C alla classe. Metodi. Breve storia
di Java.
21/12/2007 Lez. 77,78: Struttura basata su classi di un programma
java. Metodo main.
Esempi. Semplice I/O: Sistem.out.println,
JOptionPane.showInputDialog. Principali differenze tra
Java e C: cast, operatori (>>>, no operatore virgola),
tipi dati primitivi, caratteri Unicode, classe String. Attributo
final. Array.
Metodi costruttori.
7/1/2008 Lez. 79,80: (Laboratorio) Lettura da stdin mediane InputStreamReader. Cenni alle
eccezioni. Campi ad acceso pubblico e privato.
8/1/2008 Lez 81,82: (Labotatorio) Esempio di
ereditarietà. Classi astratte. Implementazione dei metodi
astratti.
10/1/2008 Lez. 83,84: Classi astratte ed interfacce.
Implementazione delle interfacce. Classi interne. Interfacce grafiche.
Eventi. Ascoltatori. Esempio di interfaccia grafica (package swing).
14/1/2008 Lez. 85,86: (Laboratorio). Implementazione di interfaccia
grafica. Uso di JFrame,
JPanel, JButton, ActionListener.
e-mail: pastore@ts.infn.it
Department of Theoretical Physics, University of Trieste, Italy - Home-page