Informatica (C.d.S. in Matematica) A.A.2010/11
Calendario Lezioni e Argomenti trattati
- Ma.22/02/11, ore 09:00-11:00, aula Cremona
Lezione 1.
Introduzione al corso; form da scaricare, compilare e spedire;
mappa concettuale del corso; concetto di algoritmo per calcolatore;
esempio di algoritmo; Schema di Von Neumann di un calcolatore: Input, CPU, Memoria, Output;
codifica binaria dell'informazione; sistema binario; codice ASCII.
- Me.23/02/11, ore 09:00-11:00, aula Cremona
Lezione 2.
Area di memoria, indirizzo, nome logico per un'area, tabella delle corrispondenze;
prime operazioni elementari; pseudolinguaggio per descrivere un algoritmo; istruzioni di
assegnazione e sequenza.
Istruzione di scelta (espressioni miste aritmetiche, relazionali
e logiche), lettura/scrittura, inizio/fine. Problema esempio.
- Gi.24/02/11, ore 09:00-11:00, aula Tonelli
Lezione 3.
Problema esempio: progettazione dell'algoritmo in pseudolinguaggio.
Completato Problema esempio. Proprieta' degli algoritmi.
Strutture fondamentali di controllo: alternativa, ciclo e sequenza;
riformulato codice esempio; assegnati alcuni semplici esercizi (vedi Esercizi).
Fasi di risoluzione di un problema. Problema: max fra tre numeri;
- Ma.01/03/11, ore 14:00-16:00, aula Cremona
Lezione 4.
Organizzazione dati in memoria e riformulazione algoritmo.
Problema: quoziente intero della divisione N/D;
metodo delle sottrazioni successive e simulazione di esecuzione;
Corretti alcuni esercizi proposti (assegnati il 25/2) ed in particolare
il n.5.
Tecnica delle scomposizioni successive e introduzione al concetto di procedura.
Problema: MCD di due interi non negativi; metodo di Euclide.
- Me.02/03/11, ore 09:00-11:00, aula Cremona
Lezione 5.
Prfogettazione dll'algoritmo e simulazione di esecuzione. Struttura di controllo procedura.
La procedura nel pseudolinguaggio usato; passaggio parametri per valore
e per indirizzo; simulazione del funzionamento.
Il passaggio parametri nei linguaggi Pascal, Fortran e C.
Esempi di esecuzione nei tre casi introdotti;
- Gi.03/03/11, ore 09:00-11:00, aula Tonelli
Lezione 6.
Procedura max fra due numeri e considerazioni;
procedura div e rem; utilizzo per l'MCD e simulazione dell'esecuzione;
Strutture dati lista o vettore; allocazione statica della memoria.
Problema: minimo fra gli elementi di una lista;
lasciati come esercizi: scrittura completa dell'algoritmo;
progettazione di una procedura min_vect; simulazione di esecuzione.
- Ma.08/03/11, ore 09:00-11:00, aula Cremona
Lezione 7.
Architettura di un calcolatore (vedi slide):
Memoria centrale, CPU, interfacce di I/O, bus di sistema.
Il Sistema Operativo (vedi slide):
Interprete Comandi; File System; Gestione delle
Periferiche; Gestione della Memoria; Gestione dei processi.
- Me.09/03/11, ore 09:00-11:00, aula Cremona
Lezione 8.
Approfondimenti sulla Gestione dei Processi, sulla gestione della Mamoria,
sulla gestione delle Periferiche e del File System.
- Gi.10/03/11, ore 09:00-11:00, aula Tonelli
Lezione 9.
Ancora sul File System; interprete dei comandi per SO Linux.
Interfaccia grafica e interfaccia testuale, utilizzo della shell,
comandi base per la gestione di file.
Procedura min_vect con passaggio lista per valore e per indirizzo.
- Gi 10/03/11, ore 14:00-17:00, Ve 11/03/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: introduzione all'ambiente Linux.
- Ma.15/03/11, ore 09:00-11:00, aula Cremona
Lezione 10.
Strutture dati tabella o matrice; allocazione statica della memoria;
lettura di una matrice per righe e colonne; memorizzazione per righe.
Problema: dati due nomi della stessa lunghezza determinarne l'ordine alfabetico;
soluzione mediante codice nel pseudolinguaggio.
Introduzione al linguaggio C: esempio di programma C e descrizione
delle sue componenti principali (direttive, identificatore main, parte
dichiarativa, parte esecutiva); tipi di dati semplici predefiniti (int, char,
float); strutture di controllo if e while.
- Me.16/03/11, ore 09:00-11:00 Aula Cremona
Lezione 11.
Demo in aula di editing, compilazione ed esecuzione di un programma C; analizzati messaggi di errore
in compilazione, linking ed esecuzione; ridirezione dell'input; utilizzo di funzioni delle librerie del C
(funzioni scanf, printf, rand, srand).
Compilatore gcc e opzioni.
Problema: conversione di un intero positivo da base 10 a base B<=10; fasi di soluzioni.
- Me 16/03/11, ore 16:00-19:00, Ve 18/03/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: strutture di controllo.
- Ma.22/03/11, ore 09:00-11:00, aula Cremona
Lezione 12.
Ancora su "conversione di un intero positivo da base 10 a base B<=10": progettazione dell'algoritmo, simulazione.
Tipi di dati in C: ripresi i tipi "int", "char" e "float"; numero di byte per la loro memorizzazione (sizeof,
long int, short int, double);
range dei valori, operatori per tipi, compatibilita' fra tipi, conversioni implicite ed esplicite (cast).
Rappresentazione degli interi per complemento a 2. Rappresentazione dei reali in forma normalizzata come
(segno, esponente, mantissa), esponente per traslazione (overflow, underflow), approssimazione della mantissa:
troncamento, arrotondamento, Std. IEEE-754.; esempio di rappresentazione di 6.1 in base 10 come float a 4 byte.
- Me.23/03/11, ore 09:00-11:00 Aula Cremona
Lezione 13.
Ripresa la rappresentazione dei numeri reali: esempio di 6.1; insieme dei numeri finiti F(beta, t, lambda, omega).
Esercizio: F(2,3,-1,2) estrarre i suoi elementi, cardinalita' e distribuzione sull'asse reale.
Tipi strutturati: il costruttore array; dichiarazione di array mono e multidimensionali (direttiva define);
gestione array mediante operazioni sugli elementi (cicli while e for).
Inizializzazione di array in linguaggio C; array di caratteri e libreria string.h;
Esempio: codice C del programma di conversione di un intero positivo da base 10 a base B<=10.
Problema: determinare i numeri primi minori di un numero assegnato (Crivello di Eratostene);
- Gi.24/03/11, ore 09:00-11:00, aula Tonelli
Lezione 14.
Puntatore (operatore &), deferenziazione (operatore *), il costruttore puntatore,
equivalenza fra array e puntatori.
Le funzioni in C: definizione di funzioni: intestazione, parametri formali, valore di ritorno, ... ;
chiamata di funzioni: parametri attuali, ...; esempi di funzioni e chiamate.
Array monodimensionali come parametri di funzioni;
esempio di funzione somma degli elementi di una lista.
- Gi 24/03/11, ore 14:00-17:00, Ve 25/03/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: array e stringhe.
- Ma.29/03/11, ore 09:00-11:00, aula Cremona
Esercitiamoci insieme: recupero, esercizi ed approfondimenti gestiti dai Tutors del corso.
- Me.30/03/11, ore 09:00-11:00, aula Cremona
Esercitiamoci insieme: recupero, esercizi ed approfondimenti gestiti dai Tutors del corso.
- Gi.31/03/11, ore 09:00-11:00, aula Tonelli
Esercitiamoci insieme: recupero, esercizi ed approfondimenti gestiti dai Tutors del corso.
- Gi 31/03/11, ore 14:00-17:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Esercitiamoci insieme: recupero, esercizi ed approfondimenti
gestiti dai Tutors del corso.
- Ma.05/04/11, ore 09:00-11:00, aula Cremona
Lezione 15.
Problema: ricerca di un elemnto in una lista ordinata di numeri (ricerca binaria).
Problema: ordinare in senso crescente una lista di numeri; metodo selection sort e bubble sort.
Ambiente globale e locale; dichiarazioni globali e prototipi di funzione; ambito di visibilita'
delle variabili; durata delle variabili; variabili statiche e automatiche; esempi.
- Me.06/04/11, ore 09:00-11:00 aula Cremona
Lezione 16.
Funzioni della standard library del C ed header file;
strutture di controllo (for, do while, switch, break, operatori ? e :);
typedef per dichiarazione "nuovi tipi" (ridefinizione); esempi;
costruttore struct: dichiarazione, dichiarazione con etichetta e typedef; inizializzazione
e utilizzo di variabili struct (accesso ai suoi campi); esempi.
- Gi.07/04/11, ore 09:00-11:00, aula Tonelli
Lezione 17.
Ancora su variabili struct; puntatore a variabile struct,
operatore "->"; esempi di informazioni organizzate a struct: numeri complessi e polinomi.
Gestione di file da programma C: puntatore alla struttura FILE, funzione fopen di apertura file,
funzioni di lettura e scrittura, controllo e chiusura di un file. Alcuni esempi.
- Gi 07/04/11, ore 14:00-17:00, Ve 08/04/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: funzioni.
- Ma.12/04/11, ore 09:00-11:00, aula Cremona
Lezione 18.
Tipo e argomenti del main. Ancora su I/O di file da programma C. Esempio.
Allocazione dinamica della memoria: funzioni malloc e free.
Organizzazione della memoria: stack (LIFO) e heap;
rischi dell'allocazione dinamica: garbage collection e dangling reference; funzione realloc;
Esempi di allocazione dinamica: matrice;
- Me.13/04/11, ore 09:00-11:00 aula Cremona
Lezione 19.
Programmazione C su piu' file: esempio, comandi di compilazione di piu' file;
precompilatore, compilatore e linker; file header, dichiarazione e definizione di oggetti;
dichiarazione extern, esempi.
- Gi 14/04/11, ore 14:00-17:00, Ve 15/04/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: strutture struct e I/O da file.
- Ma.19/04/11, ore 09:00-11:00, aula Cremona
Lezione 20.
Direttive #define (macro), #include, #ifndef #else #endif, #ifdef #else #endif,
esempi, macro con uno e due argomenti, esempi.
Comando make e file Makefile; grafo delle dipendenze; costruzione di un Makefile;
sintassi: target e command. Makefile per la compilazione di un programma esempio su piu' file.
- Me.20/04/11, ore 09:00-11:00 aula Cremona
Lezione 21.
Ancora su Makefile: macro.
Libreria GCVec2dLib; file ord_list_link.c: programma esempio
presente nell'archivio arch_lab6.tgz.
Modifica del programma per l'organizzazione del codice su piu' file.
- Me.27/04/11, ore 09:00-11:00 aula Cremona
Lezione 22.
Elaborazione Grafica: architettura per grafica interattiva; Frame Buffer, GPU, CRT; funzione
draw_point(); gestione dell'interattivita' tramite programmazione event-driven.
Sistema XWindow. Problema esempio: disegno di un segmento in coord. schermo (algoritmo di Linea
Incrementale).
- Gi.28/04/11, ore 09:00-11:00, aula Tonelli
Lezione 23.
Ancora su algoritmo di Linea Incrementale; Window e Vieport;
problema esempio: disegno di un poligono regolare in coord. floating point;
(file polygonf.c); trasformazione window-viewport.
Problema esempio: grafico di una funzione; discretizzazione in punti (tabulazione),
determinazione window, mapping window-vieport con conservazione delle proporzioni, disegno
(file draw_fun.c).
Problema esempio: traslare, scalare e ruotare poligoni piani; punti in coord. omogenee e trasformazioni
geometriche definite mediante matrici 3x3; trasformazioni complesse come composizione di trasformazioni
elementari. Introduzione alla libreria SDL e alle funzioni della libreria GCGraLib.
- Gi 28/04/11, ore 14:00-17:00, Ve 29/04/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: allocazione dinamica, programmazione su
piu' file (librerie) e Makefile.
- Ma.03/05/11, ore 09:00-11:00, aula Cremona
Lezione 24.
Ancora sulle librerie SDL e GCGraLib. Esaminati alcuni programmi dell'archivio messo a disposizione:
polygonf.c, draw_fun.c, draw_simple_game.c
- Me.04/05/11, ore 09:00-11:00 aula Cremona
Lezione 25.
Ancora sulle librerie SDL e GCGraLib. Esaminato un codice di esempio di interazione grafica.
Elementi di elaborazione di immagini: introduzione alle funzioni della libreria
GCGraLib messe a disposizione per la visualizzazione di immagini; problema dello
scaling di una immagine.
- Gi 05/05/11, ore 14:00-17:00, Ve 06/05/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Elaborazione grafica 2D.
- Ma.10/05/11, ore 09:00-11:00, aula Cremona
Lezione 26.
Elementi di elaborazione di immagini: ancora su scaling di un'immagine, rotazione, riflessione, ecc.
Esaminati alcuni programmi dell'archivio messo a disposizione: rgb2gray.c
- Ma.11/05/11, ore 09:00-11:00, aula Cremona
Lezione 27.
Richiami e formalizzazione delle strutture stack e queue; ricorsività e funzioni ricorsive in C;
esempi; algoritmo di ordinamento quick-sort in forma ricorsiva;
progettazione non ricorsiva di una funzione ricorsiva mediante gestione di uno stack;
esempio su algoritmo quick-sort.
- Gi 12/05/11, ore 14:00-17:00, Ve 13/05/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Elaborazione di Immagini.
- Ma.17/05/11, ore 09:00-11:00, aula Cremona
Lezione 28.
Il backtracking: soluzione ricorsiva al problema delle torri degli scacchi su una
scacchiera nxn; generazione di permutazioni. Strutture Grafi ed Alberi, memorizzazione,
visita DFS e BFS, alcuni semplici esempi di applicazione.
- Me.18/05/11, ore 09:00-11:00, aula Cremona
Lezione 29.
Giochi a due finiti; definizioni e albero di gioco; algoritmo MinMax; funzione di
valutazione per MinMax con profondità fissata; potatura alpha-beta dell'albero.
Funzione di valutazione per Y/Hex; grafo associato ad una posizione di Hex (vedi file .pdf relativo).
- Gi 19/05/11, ore 14:00-17:00, Ve 20/05/11, ore 11:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: Programmazione in Linguaggio C: ricorsivita'.
Torna alla
home page di Giulio Casciola