Versione del 29-Nov-2005
FONDAMENTI DI INFORMATICA 1 gruppi 89
DIARIO DELE LEZIONI
a.a. 2005 - 2006


I settimana
Argomento


1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
27-Sett-2005
I
Introduzione ai corsi di laurea della classe 9 - Ingegneria dell'informazione (prof. S. Zampieri). Presentazione del corso di Fondamenti di Informatica 1. Cenni storici sull'evoluzione dell'informatica. Elaboratore, programmi, programmazione, algoritmi. Algoritmo per il calcolo dei numeri primi: il crivello di Eratostene.
28-Sett-2005
II
Il modello di Von Neumann. CPU, ALU, clock, registri, il registro contatore di programma, ciclo fetch-decode-execute.La memoria primaria, memoria ROM e RAM. Memoria secondaria, dispositivi a tecnologia magnetica e ottica.  Il bus, linee dati, linee indirizzi, bus di controllo. I dispositivi di ingresso/uscita. Istruzioni macchina, linguaggio assembly e programma assemblatore. Linguaggi ad alto livello, programma compilatore
29-Sett-2005
III
ing. Roberto Valli
Introduzione al laboratorio. Cenni al sistema operativo Linux. Il File System di Linux. Interprete dei comandi (shell)  e comandi principali.
30-Sett-2005
IV
anticipo
Il linguaggio Java, primo programma Hello.java. Standard Output : System.out. Analisi del programma. Errori sintattici e logici. Messaggi di errore del compilatore. Processo di produzione di un programma. Compilazione in java e concetto di bytecode. Interprete java. Linguaggi compilati  e linguaggi interpretati a confronto. Struttura lessicale e lessemi.

II settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
03-Ott-2005
V
La rappresentazione dell'informazione. Notazione posizionale in base n per i numeri naturali. Codifica dei numeri naturali in base binaria. Conversione dei numeri naturali da base decimale a  binaria e viceversa. Conversione della parte frazionaria dei numeri razionali.  Rappresentazione dei numeri interi  in bit di segno e modulo e rappresentazione in complemento a due. Somma algebrica fra numeri interi in complemento a due. Condizioni di trabocco (overflow). Inverso rispetto alla somma di un numero intero in complemento a due. Rappresentazione dei numeri razionali  in virgola mobile secondo standard IEEE754. Distanza fra due numeri razionali rappresentabili successivi in singola precisione. Codifica dei testi: rappresentazione dei caratteri secondo lo standard Unicode (http://www.unicode.org/) e ASCII. Il sottoinsieme Control and Basic Latin del codice Unicode.Codifica delle immagini: cenni ai formati gif, jpeg, mpeg.
04-Ott-2005
VI
Linguaggio Java - Tipi di dati fondamentali int e double. Variabili, costanti: definizione, inizializzazione. Enunciati di assegnazione. Altri tipi di dati fondamentali: byte, short, long, float. Commenti.
05-Ott-2005
VII
Cenni alle classi involucro Byte, Short, Integer, Long, Float e Double del pacchetto java.lang della libreria standard. Coversione fra tipi di dati fondamentali. Operatori aritmetici: +, -, *, /, %. Divisione intera e in virgola mobile. L'eccezione java.lang.ArithmeticException. Le costanti della libreria standard Double.NaN, Double.POSITIVE_INFINITY e Double_NEGATIVE_INFINITY. Errori di arrotondamento. La classe java.lang.Math: metodi round(), pow(), sqrt() ecc. La classe java.lang.String. Definizione e inizializzazione di variabili riferimento a oggetti di classe String. Operatore di concatenazione fra stringhe. Metodi della classe String: length(), substring(), toUpperCase(), toLowerCase().
06-Ott-2005
VIII
Il tipo di dati fondamentale char. Il metodo charAt() della classe java.lang.String. Esempi di programmazione con oggetti di classe String. Sequenze di escape: \",\\,\u, \n. Acquisire dati in ingresso ai programmi: i metodi showInputDialog() e showMessageDialog() della classe javax.swing.JOptionPane. Importare le classi.  I pacchetti di classi: enunciato import. Il riferimento costante null. Standard Input : System.in. Acquisire stringhe da Standard  Input tramite la classe java.util.Scanner. Costruttori Scanner(InputStream in) e Scanner(String str), metodi nextInt(), nextDouble(), next(), nextLine(). Convertire stringhe in numeri: i metodi Integer.parseInt() e Double.parseDouble(), eccezione java.lang.NumberFormatException.  Il metodo printf() della classe jav.io.PrintStream e relativi specificatori di formato. Il metodo format() della class String.

III settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
10-Ott-2005
IX
Convertire i numeri in stringhe: la famiglia di metodi java.lang.String.valueOf(...). Notazione java per le costanti numeriche. Discussione delle esercitazioni del laboratorio. Classi e oggetti. Esempio di classe: BankAccount.
11-Ott-2005
X
Uso delle classi. Variabili riferimento.Oggetto come istanza di una classe: operatore new. Progetto delle classi. Variabili di esemplare.  Programmazione della classe BankAccount. Metodi: firme, parametri espliciti. Enunciato return.  Specificatori di accesso public e private. Incapsulamento. Costruttori. Parametro implicito: this
12-Ott-2005
XI
Iterazioni. Ciclo while. Enunciati semplici, composti, blocchi di enunciati.  Operatori relazionali in java: >, >=, <, >=, ==, !=. Espressioni booleane. Il tipo di dati fondamentali boolean. Variabili booleane. Costanti booleane true, false. Operatori booleani in java: !, &&, e ||. Precedenze degli operatori booleani. Tabelle di verità degli operatori booleani &&, ||, !. Leggi di De Morgan. Decisioni. Enunciato if. Clausola else. Alternative multiple. Diramazioni annidate.
13-Ott-2005

Lezioni sospese dalla Facolta' di Ingegneria su mozione del Senato Accademico
14-Ott-2005
XII
Recupero lezione del 13-Ott-2005
Confronti fra numeri in virgola mobile. Confronti fra stringhe: i metodi equals(...), equalsIgnoreCase(...), compareTo(...) della classe String. Concetto di ordinamento lessicografico. Ciclo e mezzo. Enunciati break e continue. Ciclo for. Ciclo do. Esercizi: semplici classi eseguibile che usano costrutti iterativi e decisionali (EnumeratoreMultipli, EnumeratoreMultipliAcapo, EnumeratoreMultipliInColonna). Esempio di programmazione di classi: la classe Punto per descrivere un punto nel piano cartesiano e la sua interfaccia pubblica.

IV settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
17-Ott-2005
XIII
Programmare le classi. Invocare un costruttore da un altro costruttore: enunciato this(). Parametri formali e parametri effettivi dei metodi. Passaggio dei parametri nei metodi. Metodi accessori e metodi modificatori. Metodi predicativi. Metodi privati. Visibilita' e ciclo di vita delle variabili locali, di esemplare, parametro. Specificatori d'accesso public, private, protected.Garbage collector.
18-Ott-2005
XIV
Scomporre una stringa in token usando la classe java.util.Scanner;  i metodi predicativi della classe: hasNext(), hasNextInt(), hasNextDouble(), hasNextLine(), eccezione java.util.NoSuchElementException.  Esempio: contare le parole di un testo. Variabili statiche. Ambito di visibilita'. Costanti pubbliche statiche. Complementi di sintassi java: l'enunciato switch, l'operatore di selezione. Correzione di alcune domande del test a risposte multiple di autovalutazione del 17-Ott-2005.
19-Ott-2005
XV
Copiare riferimenti a oggetti. Precondizioni dei parametri dei metodi. Lancio di oggetti eccezione da programma: enunciato throw. Asserzioni: enunciato assert. java.lang.AssertionError. Array. Indici. Definizione di un array. Dichiarazione di variabili riferimento ad array. Accesso agli elementi di un array. Dimensione di un array: la variabile pubblica length. Errore di limiti negli array: java.lang.ArrayIndexOutOfBoundException. Inizializzazione di un array. Copia di un array.Il metodo System.arraycopy().
20-Ott-2005
XVI
Array come parametri espliciti dei metodi. Array come dati di ritorno dei metodi. Enunciato for generalizzato. Semplici algoritmi sugli array: ricerca di un elemento particolare, ricerca del minimo e del massimo, cancellazione di un elemento. Inserimento di un elemento. Array riempiti solo in parte. Ridimensionamento di array dinamici. Modello della memoria in java: Java Stack e Java Heap. Re-indirizzamento di standard input e output da sistema operativo

V settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
24-Ott-2005
XVII
Array bidimensionali (cenni). Pacchetti. Eccezioni. Lancio di eccezioni: enunciato throw. Gestione delle eccezioni: enunciato try/catch . Eccezioni a gestione facoltativa: RuntimeExceptions. Eccezioni a gestione obbligatoria: Exceptions. Esercitazione: un contenitore generico di testo (AnalizzatoreDiTesto.html, AnalizzatoreDiTesto.java).
25-Ott-2005
XVIII
Eccezioni: la clausola throws. Argomenti passati sulla riga di comando. Esempio di uso di array parzialmente riempiti e di ridimensionamento dinamico di array: la classe TextContainer. Esempio di classe di prova TextContainerTester. Rendere eseguibile una classe per prova. L'ambiente integrato di programmazione BlueJ. Prova dei metodi di una classe tramite l'interfaccia BlueJ.
26-Ott-2005
XIX
Flussi. Lettura e scrittura di file di testo in java. Le classi java.io.FileReader, java.io.FileWriter, java.io.FileNotFoundException, java.io.Exception. Le classi java.io.Scanner e java.io.PrintWriter per la lettura e scrittura di righe di testo e di stringhe. Lettura e scrittura di file binari in java. Le classi java.io.FileInputStream e java.io.FileOutputStream. Esempi d lettura/scrittura a righe e a caratteri su file di testo.  Esempi d lettura/scrittura a byte su file binari .
27-Ott-2005
XX
Array paralleli: esempio. Ricorsione. Metodo ricorsivo per il calcolo del fattoriale. Ricorsione come algoritmo. Algoritmi ricorsivi e algoritmi iterativi. Caso base e semplificazione dell'invocazione ricorsiva. Ricorsione infinita: java.lang.StackOverflowError. Ricorsione in coda, ricorsione multipla. Esempio di algoritmi ricorsivi: la torre di Hanoi.

VI settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
31-Ott-2005

Sospensione delle lezioni
01-Nov-2005

Festività
02-Nov-2005
XXI
Ordinamento per selezione: algoritmo e codifica. Analisi teorica delle prestazioni. Complessita' temporale e suo andamento asintotico O(n2). Notazione O-grande, Omega-grande, Theta-grande. Ricerca lineare con e senza sentinella: algoritmo, codifica, complessita' temporale e andamento asintotico O(n). Ricerca binaria in array ordinati: algoritmo ricorsivo e iterativo, complessita' temporale e andamento asintotico O(log n). Numeri casuali.: il metodo statico Math.random(), la classe java.util.Random.
03-Nov-2005
XXII
Ordinamento per fusione: algoritmo, codifica, complessità temporale e andamento asintotico O(nlog n). Ordinamento per inserimento: algoritmo, codifica, complessita' temporale nel caso migliore O(n), medio O(n2), peggiore O(n2). Confronto fra algoritmi di ordinamento. Cenni alle espressioni canoniche (regular expressions). Il metodo useDelimiter(String pattern) della classe java.util.Scanner. Esercitazione.

VII settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
07-Nov-2005
XXIII
Ereditarieta', clausola extends. Riutilizzo del codice. Superclassi e sottoclassi. Sovrascivere i metodi della superclasse. La superclasse universale java.lang.Object. La rappresentazione UML. Ereditare metodi. Sovrascivere metodi. Il riferimento implicito super. Sovrascrivere il metodo String toString() della classe java.lang.Object. I costruttori della sottoclasse. Invocazione dei costruttori della superclasse: super(...). Questionario a risposte multiple effettuato nel laboratorio del 4-nov-2005.
08-Nov-2005
XXIV
Conversione fra riferimenti. Conversioni forzate: java.lang.ClassCastException. Polimorfismo: selezione anticipata e posticipata. Operatore booleano instanceof. Definire eccezioni. Ordinare stringhe. Ordinare oggetti. Interfacce. Interfaccia java.lang.Comparable: firma del metodo int compareTo(Object obj)
09-Nov-2005
XXV
Requisiti per la realizzazione dell'interfaccia comparable. Interfaccia Comparable parametrica in java 5.0. Algoritmi di ordinamento per oggetti Comparable. Sovrascrivere il metodo equals(). Compatibilita' dei metodi equals() e compareTo() negli oggetti Comparable. Metodi della classe java.util.Arrays. Esempio di codifica di una classe che realizza l'interfaccia Comparable: la classe Studente. Esempio di contenitore generico di oggetti ordinati di tipo Comparable. 
10-Nov-2005
XVI
Ordinare oggetti secondo criteri di ordinamento multipli. Esempio: la classe StudenteEsteso. Tipi di dati astratti e strutture dati. ADT Pila: interfaccia Stack. Realizzazione con array riempito solo in parte a lunghezza fissa o dinamicamente ridimensionabile. Specificatore di accesso protected.  Prestazioni dei metodi dell'ADT Stack realizzato con array riempito solo in parte. Analisi ammortizzata in caso di realizzazione con array ridimensionabile. Classi inolucro. Auto-boxing e unboxing in java 5.0. Java stack. Frames. Meccanismo di di invocazioni di metodi.

VIII settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
14-Nov-2005
XXVII
ADT Coda: interfaccia Queue. Realizzazione con array riempito solo in parte a dimensione fissa. Realizzazione con array ridimensionabile.Realizzazione con array circolare riempito solo in parte: andamento asintotico della complessita' O(1). Estrarre oggetti da una struttura dati. Esempio di utilizzo di strutture dati: calcolatrice a notazione polacca inversa, controllo di parentesi.
15-Nov-2005
XXIII
Struttura dati Lista Concatenata. Realizzazione della classe ListNode. Realizzazione della classe LinkedList. Analisi della complessità temporale dei metodi della classe. Esempi: realizzazione delle classi LinkedListStack e LinkedListQueue.
16-Nov-2005
XXIX
Cenni alle classi interne. Iteratore di una lista concatenata. Interfaccia ridotta ListIterator. Realizzazione della classe LinkedListIterato: metodi hasNext(), next(), add() e remove(). Accesso in sequenza ai dati di una catena tramite iteratore.Piu' di un iteratore nella lista concatenata. Lista concatenata doppia. Tipo di dati astratto Lista: interfaccia List. Liste con rango.  Cenni alle classi java.util.Vector, java.util.LinkedList e alle interfacce java.util.List, java.util.ListIterator. Esercitazione: array bidimensionali. Esercitazione: calcolo ricorsivo delle possibili permutazioni di una stringa.
17-Nov-2005
XXX
ADT Dizionario. Prestazioni in caso di realizzazione con array parzialmente riempito ordinato e non ordinato. ADT Tabella. Esempio di realizzazione di una tabella. Prestazioni in caso di realizzazione con array. uso della memoria: fattore di riempimento. Funzione di hash. Gestione delle collisioni. Tabella hash con bucket. Tabella hash con chiave generica. Il metodo hashCode() della classe Object. Funzione hash per le stringhe. Funzione hash per oggetti

 IX settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
21-Nov-2005
XXXI
Esempio di dizionario. realizzazione con array riempito parzialmente non ordinato, con array riempito parzialmente mantenuto ordinato, con tabella hash. Realizzazione semplificata dei bucket come liste concatenate interne.
22-Nov-2005
XXXII
Esempio di uso di classi della libreria standard: java.util.Vector e java.util.ArrayList, java.util.HashMap. Cenni alla programmazione generica.  Il sistema operativo. Processi, contesto dei processi, context switch. Stati dei processi. Scheduling dei processi. Memoria virtuale: indirizzi fisici e virtuali.
23-Nov-2005
XXXIII
Esercitazione: codifica di semplici strutture dati (dizionari).
24-Nov-2005
XXXIV
Il flusso di errore standard: oggetto pubblico PrintStream System.err. Il tipo di dati astratti Insieme e interfaccia Set. Esempio di realizzazione di un insieme. Metodi per le operazioni di unione, intersezione e differenza: andamento asintotico O(n2). Insiemi ordinati. Metodi per le operazioni unione, intersezione e differenza: andamento asintotico O(n log n).

 X settimana
Argomento

1 trasp/p
col  .pdf
b/n  .pdf
6 trasp/p
col .pdf
b/n  .pdf
28-Nov-2005
XXXV
Valutazione della didattica da parte degli studenti. Riepilogo dei tipi di dati astratti e delle loro realizzazioni. ADT Container, Stack, Queue, List, Dictionary, Table, HashTable, Set, SortedSet. Cenni alle classi della libreria standard  che realizzano ADT: ArratList, Vector, LinkedList, Hashtable, HashMap, HashSet
29-Nov-2005
XXXVI
Modalita' delle prove d'esame. Questionario a risposte multiple: correzione delle domande poste agli studenti nella simulazione effettuata nel laboratorio 9. Riepilogo del linguaggio java. Paradigmi di programmazione: scomposizione  funzionale,  programmazione strutturata, modularizzazione, programmazione orientata agli oggetti.