Informatica 1 per Matematica 2001/2002
Programma del Corso
- 9 Aprile 2002. Breve Storia del Calcolatore.
Strumenti per la rappresentazione dei numeri.
Strumenti per il calcolo: abaco, regolo, macchina di
Schickard, Pascal, Leibniz, macchine di Babbage.
Integratore analitico di Lord Kelvin. Il 1900:
Macchina di Hollerith,
calcolatori elettromeccanici (Zuse, Stibitz-Williams,
Harvard Mark I) e primi calcolatori a valvole
(ABC, Colossus, ENIAC, EDVAC e EDSAC).
- 11 Aprile 2002. Calcolatori di prima, seconda,
terza e quarta generazione. Evoluzione dei PC.
Il concetto di Algoritmo.
Etimologia del nome e definizione informale.
I 10 punti caratterizzanti la nozione. Esempi
di algoritmi.
- 12 Aprile 2002. Diagrammi di flusso.
Sintassi e semantica intutiva. Esempi di algoritmo: massimo tra
due numeri, scambio di variabili, algoritmo di Euclide.
Strutture while, if e repeat.
Simulazione delle ultime due mediante la prima.
Diagrammi strutturati e fortemente strutturati.
- 18 Aprile 2002. Il Teorema di Böhm-Jacopini.
Logica Digitale.
Porte AND, OR, e NOT.
Tabelle di verità e Assiomi dell'algebra Booleana.
Porte NAND, NOR e equivalenze.
RS-flip flop: alla base del bit.
Semisommatori e sommatori completi.
- 19 Aprile 2002.
Rappresentazione di numeri interi: senza segno
e con modulo e segno.
Aritmetica binaria: Funzioni (e circuiti) per
la: complementazione di n bits,
l'incremento del numero naturale rappresentato da n bits
e la somma di due numeri di n bits.
Moltiplicazione di numeri binari: principi e problemi.
Rappresentazione in complemento a 2.
Principi generali.
Algoritmo di somma (e differenza)
e dimostrazione di correttezza della regola dei riporti.
Rappresentazione ad eccesso k.
- 23 Aprile 2002. Rappresentazione di numeri "reali":
IEEE floating point. Limiti e errori.
Rappresentazione di caratteri:
codice ASCII e codice UNICODE.
Rappresentazione di suoni. Campionatura. Esempi pratici.
- 26 Aprile 2002. Rappresentazione degli spartiti: MIDI.
Rappresentazione di immagini.
Bitmap: bianco e nero, livelli di grigio e
colori RGB (red, green, blue).
Compressione di immagini (formati GIF e JPG).
Architettura del calcolatore: gerarchia di
macchine astratte.
- 30 Aprile 2002.
Architettura di Von Neumann e a Bus.
La CPU: le sue parti principali e il ciclo
"accedi, decodifica, esegui".
La memoria principale. Composizionalità della memoria.
Bus Dati e Bus Indirizzi. Memoria Cache: memorizzazione
ed accesso ai dati.
- 2 Maggio 2002. La Memoria Secondaria. Dischi magnetici e Ottici.
Principali caratteristiche. Un esempio di semplice Assembler.
Insieme di istruzioni.
- 3 Maggio 2002. Esempi di programmazione in assembler.
Linguaggi di Programmazione: Panoramica generale.
Compilazione ed Interpretazione.
- 7 Maggio 2002.
La Programmazione Imperativa usando Java.
Sintassi: Parole riservate, Identificatori, Variabili,
Tipi Primitivi, Costanti, Letterali.
- 9 Maggio 2002. Espressioni e istruzione
di Assegnamento. Struttura di
un programma Java. Alcuni metodi per l'I/O.
- 9 Maggio 2002. Esercitazione in laboratorio:
stesura, compilazione, ed esecuzione di semplici programmi Java.
- 10 Maggio 2002. Commenti in Java. Strutture di controllo.
Sequenza, blocco, istruzioni if-(then)-else,
while. Esempi.
- 14 Maggio 2002. Esercitazione in laboratorio:
Massimo e minimo di un numero, test di 'parità'
di un numero intero,
Somma e Media di una sequenza di numeri di lunghezza non nota
a priori.
- 16 Maggio 2002.
Stesura, usando il while, dell'algoritmo di Euclide in Java.
Le istruzioni do-while e for.
Esempi di cicli for. Test di Primalità. Vettori e matrici.
Dichiarazione, allocazione ed uso. Esempi.
- 17 Maggio 2002.
Sottoprogrammi, procedure, funzioni, Metodi.
Definizione ed Uso dei metodi in Java. Parametri formali e
parametri attuali. Passaggio parametri per valore.
- 21 Maggio 2002. Passaggio parametri
per indirizzo. Esempi (metodo per il MCD) ed esercizi.
Definizioni ricorsive. Principi generali.
Definizione ricorsiva in Java del Fattoriale e dell'algoritmo
di Euclide.
- 23 Maggio 2002. Descrizione ricorsiva del problema
della torre di Hanoi e sua definizione in Java.
Descrizione della successione di Fibonacci, sua definizione
ricorsiva in Java. Studio dei valori e del numero di chiamate
ricorive. Ottimizzazione del codice mediante memorizzazione di
risultati parziali.
- 23 Maggio 2002. Esercitazione in laboratorio:
Implementazione di Hanoi e Fibonacci. Test computazionali
delle varie versioni. Varianti.
- 24 Maggio 2002. Test di valutazione.
Criteri di valutazione degli algoritmi:
comprensibilità, chiarezza, efficienza.
Misura del tempo di esecuzione: benchmarking e analisi.
Dipendenza dalla dimensione (e non dal valore!)
dell'input. Confronto tra complessità
lineare, n log n, quadratica e esponenziale.
Effetti dell'evoluzione dell'HW sulle varie
famiglie di algoritmi.
- 29 Maggio 2002. Limiti superiori al tempo d'esecuzione
degli algoritmi. La notazione "O" grande. Principali risultati
ed esempi.
Calcolo della complessità degli algoritmi:
assunzione di tempo costante per assegnamenti,
input/output, e test in assenza di chiamate di funzione.
Tempo per istruzioni if-else, for, e while.
Esempi ed esercizi.
- 30 Maggio 2002. Calcolo della complessità di metodi
non ricorsivi. Definizione della relazione di ricorrenza ed esempi
di risoluzione per il calcolo della complessità di metodi
ricorsivi.
Esempio: Ricerca lineare e binaria di un elemento di un vettore.
- 31 Maggio 2002. Esempio: Ordinamento di un vettore:
bubble sort e merge sort.
Cenni su MATLAB con particolare riferimento al linguaggio
di programmazione in esso incluso.
Modalità d'esame.
Testo di Riferimento
- Aho-Ullman. Fondamenti di Informatica. Zanichelli.
Altri testi o siti di appoggio e indice delle lezioni in cui
sono rilevanti
Home page