Informatica I (C.d.S. in Matematica) A.A.2007/08
Calendario Lezioni e Argomenti trattati di volta in volta
- Lu.18/02/08, ore 11:00-13:00, aula Tonelli
Lezione 1.
Introduzione al corso; form da scaricare compilare e spedire;
mappa concettuale del corso; concetto di algoritmo per calcolatore;
esempio di algoritmo.
- Me.20/02/08, ore 11:00-13:00, aula Tonelli
Lezione 2.
Schema di Von Neumann di un calcolatore: Input, CPU, Memoria, Output.
Area di memoria, indirizzo, nome logico per un'area, tabella delle corrispondenze;
prime operazioni elementari; pseudolinguaggio per descrivere un algoritmo; istruzioni di
assegnazione, sequenza, scelta (espressioni miste aritmetiche, relazionali
e logiche), lettura/scrittura, inizio/fine.
Problema esempio: progettazione dell'algoritmo in pseudolinguaggio.
- Ve.22/02/08, ore 11:00-13:00, aula Tonelli
Lezione 3.
Completato Problema esempio. Proprieta' degli algoritmi.
Strutture fondamentali di controllo: alternativa, ciclo e sequenza;
riformulato codice esempio; algoritmi ottimali in tempo e spazio;
assegnati alcuni semplici esercizi; fasi di
risoluzione di un problema; Problema: max fra tre numeri.
- Lu.25/02/08, ore 11:00-13:00, aula Tonelli
Lezione 4.
Ancora su max fra tre numeri: organizzazione dati in memoria e riformulazione algoritmo.
Problema: quoziente intero della divisione N/D; metodo delle sottrazioni
successive e simulazione di esecuzione; tecnica delle scomposizioni
successive; Problema: MCD di due interi non negativi; metodo di Euclide;
algoritmo; simulazione di esecuzione (lasciato come esercizio); struttura di controllo procedura;
la procedura nel pseudolinguaggio usato; passaggio parametri per valore
e per indirizzo; simulazione del funzionamento.
- Me.27/02/08, ore 11:00-13:00, aula Tonelli
Lezione 5.
Il passaggio parametri nei linguaggi Pascal, Fortran e C; esempi di
esecuzione nei tre casi citati; procedura max fra due numeri e considerazioni;
procedura rem e suo utilizzo per l'MCD; simulazione di esecuzione;
lasciato come esercizio di progettare la procedura div e di riscrivere il main per l'MCD.
- Ve.29/02/08, ore 11:00-13:00, aula Tonelli
Lezione 6.
Strutture dati lista e tabella; allocazione statica della memoria.
Problema: minimo fra gli elementi di una lista; progettazione di
una procedura min_vect e di un main; simulazione di esecuzione; stessa
procedura min_vect con passaggio lista per indirizzo;
memorizzazione di una tabella;
Problema: ordine alfabetico fra due parole; progettazione di una
procedura compare con passaggio tabella per indirizzo;
Assegnati 5 esercizi di cui e' richiesto lo svolgimento di
almeno uno in modo completo.
- Lu.03/03/08, ore 11:00-13:00, aula Tonelli
Lezione 7.
Introduzione ai Sistemi Operativi ed in particolare al S.O. Linux.
Interprete Comandi; File System; Gestione delle
Periferiche; Gestione della Memoria; Gestione dei processi.
Dettagli sulla Gestione dei Processi e sul File System.
Linux: interfaccia grafica e interfaccia testuale, utilizzo della shell,
comandi base per la gestione di file.
- Me.05/03/08, ore 11:00-13:00, aula Tonelli
Lezione 8.
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, double); strutture di controllo if e while; comandi di compilazione (e linking);
comando di esecuzione.
- Me.05/03/08 (A-L) e Gi.06/03/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.10/03/08, ore 11:00-13:00, aula Tonelli
Lezione 9.
Compilatore e Linker; cenno a compilatori vs interpreti;
errori in compilazione, in linking, in esecuzione;
opzioni di compilazione (gcc); ridirezione dell'input e dell'output;
Problema: conversione di un intero positivo da base 10 a base B; progettazione
dell'algoritmo.
- Me.12/03/08, ore 11:00-13:00, aula Tonelli
Lezione 10.
Tipi di dati in C: il tipo int, allocazione memoria per int, range dei valori per int,
operazioni ammissibili per int, conversioni implicite ed esplicite; i tipi char, float
e double.
Tipi strutturati: il costruttore array;
dichiarazione di array mono e multidimensionali (direttiva define);
gestione array mediante operazioni sugli elementi (cicli while e for).
typedef per dichiarazione "nuovi tipi" (ridefinizione o enumerazione esplicita dei valori);
Problema esempio: gestione di frasi e parole (caratteri e stringhe).
- Me.12/03/08 (A-L) e Gi.13/03/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.17/03/08, ore 11:00-13:00 Aula Tonelli
Lezione 11.
Demo su Debian Live System; Problema: determinare i numeri primi minori di un
numero assegnato (Crivello di Eratostene);
puntatore (operatore &), deferenziazione (operatore *),
dichiarazione di "tipo puntatore", equivalenza fra array e puntatori.
- Me.19/03/08, ore 11:00-13:00, Aula Tonelli
Lezione 12.
Problema: ordinare in senso crescente
una lista di numeri; metodo selection sort e bubble sort.
Le procedure in C (funzioni): intestazione,
parametri formali, valore di ritorno, corpo, ecc.; chiamata di funzioni,
parametri attuali, ecc.; esempi di funzioni e chiamate;
array come parametri di una funzione.
- Me.19/03/08 (A-L) e Gi.20/03/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.31/03/08, ore 11:00-13:00, aula Tonelli
Lezione 13.
Array monodimensionali e bidimensionali come parametri di funzioni;
esempio di funzione stampa tabella;
ambiente globale e locale; prototipo di funzioni;
ambito di visibilita' delle variabili; durata delle variabili;
variabili statiche e automatiche; funzioni time e rand.
- Me.02/04/08, ore 11:00-13:00, aula Tonelli
Lezione 14.
Dettagli su strutture di controllo (for, do while, switch, break, operatori ? e :);
Costruttore struct: dichiarazione, dichiarazione con etichetta e typedef; inizializzazione
e utilizzo di variabili struct (accesso ai suoi campi); puntatore a variabile struct,
operatore "->" per accedere ai campi mediante puntatore; esempi di informazioni organizzate
a struct: numeri complessi, polinomi e lista linkata.
- Me.02/04/08 (A-L) e Gi.03/04/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.07/04/08, ore 11:00-13:00, aula Tonelli
Lezione 15.
Esempio di costruzione di una libreria di funzioni per gestire numeri complessi.
Tipo e argomenti della funzione main.
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.
- Me.09/04/08, ore 11:00-13:00, aula Tonelli
Lezione 16.
Programmazione C su piu' file: dichiarazione e definizione di oggetti globali;
dichiarazione extern, file header, direttive #include, #ifndef #endif, #ifdef #endif,
#define, variabili del precompilatore. Comandi di compilazione di piu' file;
Commentate le funzioni decomp e solve presenti nell'archivio arch_matfat.tgz.
Problema: soluzione di un sistema lineare via fattorizzazione LU;
rivisitato l'algoritmo di Gauss con scambio delle righe e perno
massimo; progettazione della fattorizzazione e separatamente della soluzione;
scelta di memorizzare le matrici L_i di Gauss come colonne di A, le matrici
di permutazione come un array degli scambi e la matrice U sempre in A; fase di soluzione
in avanti sfruttando le informazioni memorizzate, ma senza ricostruire la matrice
L della fattorizzazione PA=LU;
- Me.09/04/08 (A-L) e Gi.10/04/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.14/04/08, ore 11:00-13:00, aula Tonelli
La lezione e' sospesa per le elezioni politiche.
- Me.16/04/07, ore 11:00-13:00, aula Tonelli
Lezione 17.
Funzionamento del compilatore e del linker per programmazione su piu' file.
Comando make e file Makefile; grafo delle dipendenze; costruzione di un Makefile;
sintassi; target; macro.
I/O grafico: architettura per grafica interattiva; Frame Buffer, GPU, CRT; funzione
write_pixel();
- Me.16/04/08 (A-L) e Gi.17/04/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.21/04/08, ore 11:00-13:00, aula Tonelli
Lezione 17.
Gestione dell'interattivita' tramite programmazione event-driven.
Sistema XWindow. Introduzione alle funzioni della libreria gra_lib messe
a disposizione per ottenere un output grafico
con programmazione C: funzioni di inizializzazione, setting e disegno.
Progettazione di algoritmi con rappresentazione grafica dei risultati;
problema esempio: disegno di un poligono regolare:
calcolo in coord. reali e disegno in coord. schermo (file polygonf.c);
trasformazione window-viewport;
problema esempio: grafico di una funzione; discretizzazione in punti (tabulazione),
determinazione window, mapping window-vieport con conservazione delleproporzioni, disegno.
- Me.23/04/08, ore 11:00-13:00, aula Tonelli
Lezione 18.
Allocazione dinamica della memoria: funzioni malloc, free e
realloc; esempi; memoria divisa in stack (LIFO) e heap;
rischi dell'allocazione dinamica: garbage collection e dangling reference;
esempi di allocazione.
- Me.23/04/08 (A-L) e Gi.24/04/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.28/04/08, ore 11:00-13:00, aula Tonelli
CORREZIONE ESERCITAZIONI ASSEGNATE.
- Ma.29/04/08, ore 14:00-16:00, Laboratorio Linux
RICEVIMENTO PER ESERCITAZIONI CONSEGNATE E CORRETTE DALLA DR.SSA BECCARI
- Me.30/04/08, ore 11:00-13:00, aula Tonelli
Lezione 20.
Elementi di elaborazione di immagini: introduzione alle funzioni della libreria
image_lib.c messe a disposizione per la visualizzazione di immagini.
Programmi presenti in ambiente Linux: display e import.
Informazione colore e componenti RGB;
Scala e rotazione di una immagine: trasformazioni di scala e rotazione;
interpolazione componenti colore (nearest neighbor, bilinear interpolation e bicubic interpolation).
esaminato codice main di esempio rgb2gray.c per la conversione di una immagine a colori in livelli di grigio.
- Me.30/04/08 ore 14:00-16:00, Laboratorio Linux.
RICEVIMENTO PER ESERCITAZIONI CONSEGNATE E CORRETTE DA CASCIOLA
- Lu.05/05/08, ore 11:00-13:00, aula Tonelli
Lezione 21.
Ricorsivita': esempi di funzioni ricorsive; gestione della ricorsione e memoria stack;
esempio del fattoriale di un numero ed mcd; algoritmo di ordinamento quick-sort via ricorsione.
Introduzione al Mancala.
- Me.07/05/08, ore 11:00-13:00, aula Tonelli
Lezione 22.
Struttura dati STACK e sua gestione mediante array e lista linkata.
Progettazione non ricorsiva di una funzione ricorsiva mediante gestione di uno stack;
esempio su algoritmo quick-sort (implementazione non ricorsiva in C).
Il backtracking: generazione di permutazioni; soluzione del problema delle otto regine sia ricorsivamente
che non.
- Me.07/05/08 (A-L) e Gi.08/05/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Lu.12/05/08, ore 11:00-13:00, aula Tonelli
Lezione 23.
Struttura dati albero: definizioni e rappresentazione in memoria;
alberi binari: pieno, completo e heap; tecniche di ricerca e attraversamento di
un albero binario e generico; visita DepthFirst inorder, preorder, postorder.
Giochi a due finiti; definizioni e albero di gioco; algoritmo MinMax con profondità
fissata.
- Me.14/05/08, ore 11:00-13:00, aula Tonelli
Lezione 24.
Ancora su algoritmo MinMax con prodondità fissata e potatura dell'albero;
applicazione al gioco Mancala: Albero di gioco, funzione di valutazione di una
configurazione.
Presentato e discusso il progetto d'esame (vedi file .pdf relativo).
- Me.14/05/08 (A-L) e Gi.15/05/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Me.21/05/08 (A-L) e Gi.22/05/08 (M-Z), ore 14:00-16:30, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
Torna alla
home page di Giulio Casciola