Fondamenti di Informatica, anno accademico 2011-2012 |
Obiettivi | Programma | Materiale didattico | |
Orario delle lezioni | Ricevimento studenti | Modalità d'esame | |
Diario delle lezioni | Prove d'esame |
Vengono presentati alcuni algoritmi fondamentali per problemi di ordinamento, ricerca e selezione, alcuni problemi numerici, evidenziandone le caratteristiche di efficienza attraverso l'analisi di complessità asintotica.
Vengono descritti i principali metodi di codifica dell'informazione.
Alla fine del corso lo studente sarà in grado di:
Componenti di un sistema di elaborazione: hardware, software, principali unità periferiche. Interazione con un sistema operativo basato su finestre. Concetto di cartella, documento, applicazione. Il sistema operativo: funzioni principali, gestione dei processi, gestione della memoria, file system.
Rappresentazione dell'informazione: codifica di informazioni numeriche - sistemi di numerazione posizionali, codifica binaria, ottale, esadecimale, conversioni di base. Rappresentazione di numeri interi negativi. Rappresentazione in virgola mobile. Codifica di caratteri.
Concetto di algoritmo. Esempi di algoritmi in linguaggio naturale. Generalità sui linguaggi di programmazione, compilatori.
Programmazione in linguaggio Java: la Java Virtual Machine, ambienti di programmazione, compilazione ed esecuzione di programmi Java. Costrutti essenziali del linguaggio: variabili, espressioni, oggetti. Assegnazioni, metodi di input/output, istruzioni di selezione, ed iterazione. Uso di classi predefinite, invocazione di metodi. Consultazione della documentazione standard Java. Definizione di classi, principio della riutilizzazione del codice. Implementazione di vettori e matrici. Ereditarietà e polimorfismo.
Algoritmi fondamentali: Ricerca sequenziale, ricerca dicotomica su un vettore ordinato. Ordinamento: selection sort, merge sort, quick sort, bubble sort. Algoritmo di Euclide per la ricerca del Massimo Comun Divisore (MCD). Algoritmo per la ricerca del k-esimo elemento. Algoritmi di base su matrici.
Introduzione alla complessità computazionale: concetto di complessità di un algoritmo, notazioni asintotiche. Equazioni di ricorrenza e metodi per la loro soluzione. Complessità computazionale degli algoritmi studiati.
L'esame consiste in una prova scritta e un colloquio. Nella prova scritta si richiede di scrivere o completare sorgenti Java e di rispondere a domande su argomenti teorici.
26 Settembre 2011 | |
---|---|
Argomenti |
Introduzione al corso Concetto di problema e di algoritmo Esempi di algoritmi |
Riferimenti al testo |
torna all'elenco delle lezioni
28 Settembre 2011 | |
---|---|
Argomenti |
Tipi primitivi: interi, reali, carattere, boolean Dichiarazione di variabili Identificatori Istruzione di assegnazione Uso di literal (costanti) |
Riferimenti al testo | Capitolo 1, Capitolo 3 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
3 Ottobre 2011 | |
---|---|
Argomenti |
Assegnazioni, uso di semplici espressioni Operatori aritmetici Semplici espressioni Precedenza tra operatori Conversione implicita Conversione esplicita (cast) Assegnazioni tra tipi disomogenei |
Riferimenti al testo | Capitolo 3 |
torna all'elenco delle lezioni
5 Ottobre 2011 (laboratorio) | |
---|---|
Argomenti |
Descrizione dei pacchetti JRE (Java Runtime Environment) e SDK (Software Development Kit) Editing di programmi Java con Blocco Note Compilazione ed esecuzione da "Prompt dei comandi" usando gli strumenti Cenno sull'uso di istruzioni condizionali Esempi di semplici programmi Java Correzione di errori sintattici e semantici Esercizi su assegnazioni e istruzioni condizionali |
Esercizi proposti | Esercitazione 1 |
torna all'elenco delle lezioni
7 Ottobre 2011 | |
---|---|
Argomenti | Costruzione di espressioni complesse Precedenza tra operatori Operatori relazionali: Istruzione Istruzione Istruzioni |
Riferimenti al testo | Capitolo 3 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
10 Ottobre 2011 | |
---|---|
Argomenti | Istruzione composta Espressioni booleane complesse: operatori Istruzioni di ciclo: l'istruzione |
Riferimenti al testo | Capitoli 4 e 5 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
1" Ottobre 2011 (laboratorio) | |
---|---|
Argomenti |
|
Esercizi proposti | Esercitazione 2 |
torna all'elenco delle lezioni
14 Ottobre 2011 | |
---|---|
Argomenti |
Esercizi sull'uso di cicli e istruzioni condizionali Uso di variabili boolean per il controllo di cicli |
Riferimenti al testo | Capitoli 4 e 5 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
17 Ottobre 2011 | |
---|---|
Argomenti |
Operatori di preincremento e postincremento Uso di variabili boolean per il controllo di cicli Istruzioni Istruzione di ciclo Esempi di semplici programmi con cicli e istruzioni di selezione |
Riferimenti al testo | Capitoli 4 e 5 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
19 Ottobre 2011 (laboratorio) | |
---|---|
Argomenti |
Metodi di input/output della classe Generazione di numeri pseudocasuali con Esempi di programmi con cicli: verificare varie proprietà di una sequenza di numeri reali. |
Listati ed esercizi proposti | Esercitazione 3 |
torna all'elenco delle lezioni
21 Ottobre 2011 | |
---|---|
Argomenti |
Istruzione di ciclo Istruzioni di assegnazione con modifica Esercizi su cicli |
Listati ed esercizi proposti |
Soluzione degli esercizi proposti nella esercitazione del 19 Ottobre 2011 |
torna all'elenco delle lezioni
24 Ottobre 2011 | |
---|---|
Argomenti |
Introduzione agli array monodimensionali: dichiarazione, allocazione ed uso Inizializzazione di array La proprietà Input e output di array |
Riferimenti al testo | Capitolo 6 |
Listati ed esercizi proposti |
Esercizi di base su array:
Data in input una sequenza di interi che rappresentano frequenze:
|
torna all'elenco delle lezioni
26 Ottobre 2011 (laboratorio) | |
---|---|
Argomenti | Semplici esercizi su arrays |
Listati ed esercizi proposti | Esercitazione 4 |
torna all'elenco delle lezioni
28 Ottobre 2011 | |
---|---|
Argomenti |
Ricerca sequenziale in un array non ordinato Esercizi su array |
Riferimenti al testo | Capitolo 6 |
Listati ed esercizi proposti |
Algoritmi di base su array:
|
torna all'elenco delle lezioni
2 Novembre 2011 (laboratorio) | |
---|---|
Argomenti |
Introduzione agli array bidimensionali: dichiarazione, allocazione ed uso Inizializzazione di array bidimensionali La proprietà |
Riferimenti al testo | Capitolo 6 |
Listati ed esercizi proposti |
Leggi da tastiera le dimensioni di una matrice e suoi elementi, memorizzandoli in un array bidimensionale LeggiMatrice.java Esercitazione su array bidimensionali: Esercitazione 5 |
torna all'elenco delle lezioni
4 Novembre 2011 | |
---|---|
Argomenti |
Esercizi su array bidimensionali |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
7 Novembre 2011 | |
---|---|
Argomenti |
I metodi Definizione e chiamata di metodi Accesso a metodi di classi esterne, chiamata di metodi Metodi Parametri formali e parametri attuali: il passaggio dei parametri La signature di un metodo overloading di metodi
|
Riferimenti al testo | Capitolo 7 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
9 Novembre 2011 | |
---|---|
Argomenti | Esercitazione su metodi su arrays |
Listati ed esercizi proposti |
torna all'elenco delle lezioni
11 Novembre 2011 | |
---|---|
Argomenti |
Implementazione di un metodo per la ricerca sequenziale in un array disordinato Ricerca sequenziale in un array ordinato L'algoritmo di ricerca binaria su array ordinati |
Riferimenti al testo | Cormen, Leiserson, Rivest, pagg. 21-26 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
14 Novembre 2011 | |
---|---|
Argomenti |
Introduzione alla complessità computazionale: concetto di risorsa Analisi di complessità di semplici algoritmi: ricerca sequenziale, test di primalità Analisi della complessità dell'algoritmo di ricerca binaria Applicaizone del principio di bisezione alla soluzione numerica di una equazione definita da una funzione continua |
Riferimenti al testo | Cormen, Leiserson, Rivest, pagg. 21-26 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
16 Novembre 2011 | |
---|---|
Argomenti |
Assegnazione tra arrays Passaggio di parametri array (parametri riferimento) Metodi che restituiscono un riferimento a array Esercitazione su metodi su arrays |
Listati ed esercizi proposti |
torna all'elenco delle lezioni
18 novembre 2011 | |
---|---|
Argomenti |
Misure di complessità: le notazioni asintotiche O(), Ω(), Θ() Esempi di classi di funzioni Uso delle notazioni asintotiche per esprimere limitazioni superiori e inferiori della complessità di algoritmi |
Riferimenti al testo | Capitolo 12 e seguenti Cormen, Leiserson, Rivest, pagg. 21-26 |
torna all'elenco delle lezioni
21 Novembre 2011 | |
---|---|
Argomenti |
L'algoritmo di ordinamento per selezione (selection sort) Analisi della complessità computazionale del selection sort |
Riferimenti al testo | Cormen, Leiserson, Rivest, pagg. 21-26 |
Listati ed esercizi proposti |
|
torna all'elenco delle lezioni
23 Novembre 2011 (lab) | |
---|---|
Argomenti | Esercizi di programmazione: Esercitazione 8 |
torna all'elenco delle lezioni
25 Novembre 2011 | |
---|---|
Argomenti |
Algoritmo di ordinamento a bolle (Bubble sort) e suoi miglioramenti Analisi della complessità computazionale del bubble sort |
Riferimenti al testo | Cormen, Leiserson, Rivest, pagg. 21-26 |
torna all'elenco delle lezioni
28 Novembre 2011 | |
---|---|
Argomenti |
Introduzione alla ricorsione. Esempio di algoritmo ricorsivo per il calcolo del fattoriale Il paradigma divide et impera. L'algoritmo di ordinamento per fusione (Merge Sort)
|
Riferimenti al testo | Capitolo 12 e seguenti |
torna all'elenco delle lezioni
30 Novembre 2011 (lab) | |
---|---|
Argomenti |
Eccezioni: eccezioni controllate e non controllate Gestione delle eccezioni (costrutto Posizionamento della gestione delle eccezioni |
Listati ed esercizi proposti | soluzioni della esercitazione precedente, con gestione delle eccezioni in input |
torna all'elenco delle lezioni
2 Dicembre 2011 | |
---|---|
Argomenti |
L'algoritmo Quick sort: QuickSort.java Versione animata dell'algoritmo Quick sort, che mostra il funzionamento per ciascuna chiamata ricorsiva: QuickSortAnimato.java Complessità computazionale del quick sort nel caso peggiore |
Riferimenti al testo | Cormen, Leiserson, Rivest (pagine indicate) |
torna all'elenco delle lezioni
5 Dicembre 2011 | |
---|---|
Argomenti |
Algoritmo per il calcolo del k-esimo elemento: Selection.java Versione animata dell'algoritmo Selection, che mostra il funzionamento per ciascuna chiamata ricorsiva: SelectionAnimato.java L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione ricorsiva
Complessità computazionale dell'algoritmo MCD di Euclide |
Riferimenti al testo | Cormen, Leiserson, Rivest (pagine indicate) |
torna all'elenco delle lezioni
7 Dicembre 2011 (laboratorio) | |
---|---|
Argomenti | Accesso a file di testo
La classe |
Listati ed esercizi proposti |
Esercitazione 9: accesso a file di testo. Nella stessa pagina è disponibile una soluzione alla esercitazione |
torna all'elenco delle lezioni
12 Dicembre 2011 | |
---|---|
Argomenti |
Analisi della complessità computazionale di algoritmi ricorsivi.
Introduzione alla programmazione a oggetti
Definizione della classe
|
Riferimenti al testo | Equaz. di ricorrenza: Cormen, Leiserson, Rivest (pagine indicate) Programmazione a oggetti: capitoli 8 e seguenti del testo Java |
Listati proposti |
|
torna all'elenco delle lezioni
14 Dicembre 2011 (lab) | |
---|---|
Argomenti | Esercitazione sulla definizione di classi |
Estensione della classe Osservazioni in OsservazioniEsteso, come richiesto dal programma UsaOsservazioniEsteso.java Soluzione: OsservazioniEsteso.java, con commenti Javadoc |
torna all'elenco delle lezioni
16 Dicembre 2011 | |
---|---|
Argomenti | Codifica dell'informazione:
|
Riferimenti al testo | appunti delle lezioni e testo di Ceri, Mandrioli, Sbattella |
Listati ed esercizi proposti |
torna all'elenco delle lezioni
19 Dicembre 2011 | |
---|---|
Argomenti |
Esempio di definizione ed uso di una classe Sovraccarico del costruttore: uso del L'oggetto di invocazione: uso del Definizione ed invocazione di metodi Definizione di sottoclassi: chiamata del costruttore della superclasse attraverso |
Riferimenti al testo | Capitoli 8 e seguenti |
Listati proposti |
|
torna all'elenco delle lezioni
21 Dicembre 2011 (laboratorio) | |
---|---|
Argomenti | Overriding: ridefinizione di metodi in sottoclassi Il metodo Esercitazione sulla programmazione a oggetti |