Informatica I (C.d.S. in Matematica e Matematica Informatico-Computazionale) A.A.2004/05
Argomenti trattati a Lezione
- Lu.28/02/05, ore 11.00-13.00, aula Tonelli, Lezione 1.
Introduzione al corso; rilevazione statistica mediante compilazione
scheda informativa; concetto di algoritmo per calcolatore; schema
di Von Neumann di un calcolatore: Input, CPU, Memoria, Output;
area di memoria, indirizzo, nome logico per un'area, bit, word,
tabella delle corrispondenze, prime operazioni elementari;
pseudolinguaggio per descrivere un algoritmo; istruzione di
assegnazione.
- Gi.03/03/05, ore 11.00-13.00, aula Tonelli, Lezione 2.
Istruzione di alternativa; espressioni miste (aritmetiche, relazionali
e logiche); istruzioni di lettura e stampa; istruzioni di inizio e fine;
problema esempio: progettazione dell'algoritmo in pseudolinguaggio e
simulazione di esecuzione; proprieta' degli algoritmi.
- Ve.04/03/05, ore 11.00-13.00, aula Tonelli, Lezione 3.
Strutture fondamentali di controllo: alternativa, ciclo e sequenza;
riformulato codice esempio; algoritmi ottimali in tempo e spazio;
calcoli trattabili; assegnati alcuni semplici esercizi; fasi di
risoluzione di un problema; problema esempio: il max fra tre numeri;
organizzazione dati in memoria e riformulazione algoritmo.
- Lu.07/03/05, ore 11.00-13.00, aula Tonelli, Lezione 4.
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; struttura di controllo procedura;
la procedura nel pseudolinguaggio usato; passaggio parametri per valore
e per indirizzo.
- Gi.10/03/05, 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;
procedura div e rem e loro utilizzo dal codice per l'MCD;
strutture dati lista e tabella; allocazione statica della memoria.
- Ve.11/03/05, ore 11.00-13.00, aula Tonelli, Lezione 6.
Problema: minimo fra gli elementi di una lista; progettazione di
una procedura e di un main; simulazione di esecuzione; stessa
procedura min_lista con passaggio lista per indirizzo; problema:
conversione di una intero positivo da base 10 a base B; progettazione
di una procedura e di un main.
- Lu.14/03/05, ore 11.00-13.00, aula Tonelli, Lezione 7.
Sistema Operativo: Interprete Comandi; File System; Gestione delle
periferiche; Gestione della Memoria; Gestione dei processi.
- Me.16/03/05, ore 14.00-18.00, Laboratorio Linux
- Gi.17/03/05, ore 11.00-13.00, aula Tonelli, Lezione 8.
Sistema Operativo: ancora sulla Gestione della Memoria (rilocazione);
funzionamento del compilatore e del linker; schema della CPU (CU, ALU e
registri) e architettura di un calcolatore (CPU, ROM, RAM, Bus Dati,
Bus Indirizzi, Linee di Controllo, PIO, Dispositivi di I/O).
Introduzione al linguaggio C: esempio di programma C e descrizione
delle sue componenti principali (direttive, identificatore main, parte
dichiarativa, parte esecutiva).
- Lu.21/03/05, ore 11.00-13.00, aula Tonelli, Lezione 9.
Introduzione al linguaggio C: ancora sul programma esempio (fine descrizione);
comandi di compilazione e linking; comando di esecuzione; errori di
compilazione, linking ed esecuzione; tipi di dati semplici predefiniti
(int, char, float e double): occupazione di memoria e set delle operazioni
ammissibili; conversioni implicite ed esplicite.
- Me.23/03/05, ore 14.00-18.00, Laboratorio Linux
- Gi.24/03/05, ore 11.00-13.00, aula Tonelli, Lezione 10.
Tipi strutturati: il costruttore array. Dichiarazione di array mono e multidimensionali
(direttiva define e dichiarazione const);
inizializzazione, gestione mediante operazioni sugli elementi (cicli while e for),
array di caratteri con esempio di gestione; algoritmo di Eratostene per
determinare i numeri primi minori di un assegnato numero naturale.
- Me.30/03/05, ore 14.00-18.00, Laboratorio Linux
- Gi.31/03/05, ore 11.00-13.00, aula Tonelli, Lezione 11.
typdef per dichiarazione "nuovi tipi", puntatore (operatore &), deferenziazione (operatore *),
dichiarazione di "tipo puntatore", array e puntatori; problema: ordinare in senso crescente
una lista di numeri; progettato l'algoritmo usando il metodo di selezione e steso il codice
C relativo.
- Lu.04/04/05, ore 11.00-13.00, aula Tonelli, Lezione 12.
Ancora su array e puntatori; le procedure in C (funzioni): intestazione,
parametri formali, valore di ritorno, corpo, ecc.; chiamata di funzioni,
parametri attuali, ecc.; array come parametri di una funzione; esempi
di funzioni e chiamate.
- Me.06/04/05, ore 14.00-18.00, Laboratorio Linux
- Gi.07/04/05, ore 11.00-13.00, aula Tonelli, Lezione 13.
Array multidimensionali e funzioni in C; semplice esempio di stampa matrice.
Problema: fattorizzazione LU di una matrice per procedere alla soluzione di un
sistema lineare; 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 (il codice relativo in C e' scaricabile dal link
alla pagina web del corso: archivio matfat.tgz).
- Lu.11/04/05, ore 11.00-13.00, aula Tonelli, Lezione 14.
Ripresa la fattorizzazione LU e commentate le funzioni decomp e solve presenti
nell'archivio matfat.tgz. Compilazione di codice C su piu' file; dichiarazione
e definizione di oggetti in C; prototipi di funzioni; file header ed in
particolare matfat.h; dichiarazione extern; ambiente globale e locale; durata
delle variabili; file const.h e direttive #ifndef #endif, #ifdef #endif.
- Me.13/04/05, ore 14.00-18.00, Laboratorio Linux
- Gi.14/04/05, ore 11.00-13.00, aula Tonelli, Lezione 15.
Riprese direttive al compilatore e introdotto -DDEBUG in compilazione; introduzione
alle funzioni in graph_phun.c messe a disposizione per ottenere un output grafico
con un programma C: funzioni InitGraph(); CreateWindow(); CloseGraph(); ecc.;
compilazione e linking su piu' file con libreria grafica; finestra grafica (viewport),
pixel, risoluzione e sistema di coordinate schermo; progettazione di algoritmi con
rappresentazione grafica dei risultati (esempio: disegno di un poligono regolare).
- Lu.18/04/05, ore 11.00-13.00, aula Tonelli, Lezione 16.
Ancora su disegno di un poligono regolare: algoritmo per determinazione vertici,
trasformazione window-viewport; problema: grafico di una funzione; discretizzazione
in puntir, determinazione window, mapping window-vieport con conservazione del
rapporto rapporto width/height. 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.
- Me.20/04/05, ore 14.00-18.00, Laboratorio Linux
- Gi.21/04/05, ore 11.00-13.00, aula Tonelli, Lezione 17.
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 fra cui lista linkata. Problema: valutazione di un polinomio nella base di Bernstein.
richiamata definizione in [a,b] e cambio di variabile in [0,1]; formula ricorrente sui
polinomi base di gradi inferiore e formula ricorrente sui coefficienti (algoritmo di
de Csteljau); stesura codice in C che implementa l'algoritmo di de Casteljau.
Messo a disposizione archvio 270405.tgz con funzione CurveLoad.c di caricamento dati
da file e file dati di esempio.
- Me.27/04/05, ore 14.00-18.00, Laboratorio Linux
- Gi.28/04/05, ore 11.00-13.00, aula Tonelli, Lezione 18.
Ripreso codice C che implementa l'algoritmo di de Casteljau; versioni in cui
la struttura e' passata per indirizzo e per valore; copia e confronto di strutture;
complessita' computazionale dell'algoritmo di de Casteljau; derivata di un polinomio
nella base di Bernstein; curva di Bezier; esaminato esercizio n.6 su CurveLoad;
proposto di realizzare valutazione di un polinomio mediante formula ricorrente sui
polinomi di Bernstein. Allocazione dinamica della memoria: funzioni malloc, free e
realloc; esempi; memoria divisa in stack (LIFO) e heap e codice di esempio;
rischi dell'allocazione dinamica: garbage collection e dangling reference.
- Lu.02/05/05, ore 11.00-13.00, aula Tonelli, Lezione 19.
Introduzione alle funzioni in draw_3d_geom.c messe a disposizione per ottenere la
visualizzazione e interazione di mesh 3D: funzioni InitGraph(); alloc_mesh();
Draw3Dgeom(); free_mesh(); CloseGraph(); struttura PSP (Punti Segmenti e Poligoni)
per la rappresentazione di una qualunque geometria 3D mediante mesh;
programma esempio draw_fun.c per la rappresentazione grafica
di una funzione z=f(x,y): costruzione della mesh e utilizzo della libreria grafica
messa a disposizione. Comando make e file Makefile; grafo delle dipendenze;
costruzione di un Makefile; sintassi; target; macro. Makefile di compilazione e
linking di un file main (cube.c) che usa l'ambiente di visualizzazione 3D messo
a disposizione.
- Me.03/04/05, ore 14.00-18.00, Laboratorio Linux
- Gi.04/04/05, ore 11.00-13.00, aula Tonelli, Lezione 20.
Dettagli su strutture di controllo (for, do while, operatori ? e :, switch, break);
introduzione alle funzioni in draw_image.c messe a disposizione per la visualizzazione
di immagini: funzioni InitGraph(); LoadImage(); BlackImage(); CreateWindow(); PutImage();
CloseWindow(); CloseGraph(); funzioni della libreria X, XGetPixel() e XPutPixel().
Informazione colore e componenti RGB; esaminato codice main di esempio rgb2gray.c
per la conversione di una immagine a colori in livelli di grigio. Esaminati brevemente
gli esercizi sulla elaborazione delle immagini proposti.
- Lu.09/05/05, ore 11.00-13.00, aula Tonelli, Lezione 21.
Ricorsivita': esempi di funzioni ricorsive; gestione della ricorsione; esempio del fattoriale
di un numero; esempio del determinante di una matrice con Laplace; permutazioni di n elementi;
determinante secondo Leibniz; algoritmo di ordinamento quick-sort (implementazione ricorsiva in
C di Sedgewick).
- Me.11/05/05, ore 14.00-18.00, Laboratorio Linux
- Gi.12/05/05, ore 11.00-13.00, aula Tonelli, Lezione 22.
Ancora sull'algoritmo quick-sort (implementazione ricorsiva in C); implementazione non ricorsiva
di una funzione ricorsiva: gestione di uno stack; esempio su algoritmo quick-sort
(implementazione non ricorsiva in C); ricerca binaria in una lista ordinata.
Alcuni chiarimenti: *p od anche p[0]; **p od anche *p[0] od anche p[0][0]; allocazione
"dinamica" di un'array in una funzione.
- Lu.16/05/05, ore 11.00-13.00, aula Tonelli, Lezione 23.
Ricostruzione di Funzioni: metodo dei minimi quadrati (caso monovariato), minimi quadrati interpolanti
un punto; minimi quadrati (caso bivariato), minimi quadrati variabili (MLS), scelta di funzioni
peso per minimi quadrati variabili interpolanti (IMLS), regolarita'.
- Me.18/05/05, ore 11.00-13.00, aula Tonelli, Lezione 24.
Funzioni peso normalizzate; proprieta'; funzioni peso troncate (approccio locale);
IMLS caso bivariato; metodo di Shepard modificato globale e locale; metodo di Shepard.
Assegnato progetto "Ricostruzione di Funzioni" (vedi dispensa, testo, file dati messi a
disposizione).
- Me.18/05/05, ore 14.00-18.00, Laboratorio Linux
Torna alla
home page di Giulio Casciola