Informatica (C.d.S. in Matematica) A.A.2009/10
Calendario Lezioni e Argomenti trattati
- Lu.22/02/10, ore 09:00-11: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; Schema di Von Neumann di un calcolatore: Input, CPU, Memoria, Output;
codifica binaria dell'informazione; sistema binario; codice ASCII.
- Ma.23/02/10, ore 09:00-11:00, aula Tonelli
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.25/02/10, 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.
- Lu.01/03/10, ore 09:00-11:00, aula Tonelli
Lezione 4.
Problema: max fra tre numeri;
organizzazione dati in memoria e riformulazione algoritmo.
Problema: quoziente intero della divisione N/D (esercizio n.6 assegnato il 25/2);
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;
- Ma.02/03/10, ore 09:00-11:00, aula Tonelli
Lezione 5.
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 citati; procedura max fra due numeri e considerazioni;
procedura div e suo utilizzo per l'MCD;
lasciato come esercizio di progettare la procedura rem, di riscrivere il main per l'MCD
e di simularne l'esecuzione;
- Gi.04/03/10, ore 09:00-11:00, aula Tonelli
Lezione 6.
Correzione dell'esercizio n.5 assegnato il 25/2.
Strutture dati lista o vettore; allocazione statica della memoria.
Problema: minimo fra gli elementi di una lista; progettazione di
una procedura min_vect; lasciato come esercizio la scrittura di un
main ela simulazione di esecuzione.
- Lu.08/03/10, ore 09:00-11:00, aula Tonelli
Lezione 7.
Procedura min_vect con passaggio lista per valore e per indirizzo.
Problema: conversione di un intero positivo da base 10 a base B; fasi di soluzioni;
progettazione dell'algoritmo, simulazione.
Strutture dati tabella o matrice; allocazione statica della memoria;
lettura di una matrice per righe e colonne; memorizzazione per righe.
- Ma.9/03/10, ore 09:00-11:00, aula Tonelli
Lezione 8.
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.
Dettagli sulla Gestione dei Processi e della Mamoria.
- Gi.11/03/10, ore 10:00-11:00, aula Tonelli
Lezione 9.
Dettagli su gestione delle Periferiche e File System.
Interprete dei comandi per SO Linux.
Interfaccia grafica e interfaccia testuale, utilizzo della shell,
comandi base per la gestione di file.
- Ve 12/03/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: introduzione all'ambiente Linux.
- Lu.15/03/10, ore 09:00-11:00, aula Tonelli
Lezione 10.
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; comandi di compilazione;
comando di esecuzione.
Compilatore e Linker: errori in compilazione, in linking, in esecuzione; opzioni di compilazione (gcc).
- Ma.16/03/10, ore 09:00-11:00 Aula Tonelli
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 della libreria
matematica del C.
Tipi di dati in C: i tipi int, char, float e double; allocazione di memoria, range dei valori,
operazioni ammissibili.
Sui numeri finiti (float e double): forma normalizzata, rappresentazione (segno, esponente, mantissa),
insieme F(beta, t, lambda, omega), F nel caso float(4byte) e double(8byte)
- Gi.18/03/10, ore 09:00-10:00, Aula Pincherle
Lezione 12.
Conversione di un numero < 1 da base 10 a base B; rappresentazione in memoria di un numero reale:
conversione in base 2, normalizzazione, memorizzazione segno, esponente per traslazione, mantissa (esempio);
troncamento, arrotondamento, overflow, underflow; Std. IEEE-754 1985: Nan, inf, round to even, ecc.
Esercizio: F(2,3,-1,2) estrarre i suoi elementi, cardinalita' e distribuzione sull'asse reale;
Compatibilita' fra tipi in C: conversioni implicite ed esplicite (cast).
- Ve 19/03/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: strutture di controllo.
- Lu.22/03/10, ore 09:00-11:00, aula Tonelli
Lezione 13.
Soluzione esercizio su F(2,3,-1,2); troncamento e arrotondamento in formule; unita' di arrotondamento
e sua caratterizzazione; errore di rappresentazione e precisione di calcolo.
Tipi strutturati: il costruttore array;
typedef per dichiarazione "nuovi tipi" (ridefinizione);
dichiarazione di array mono e multidimensionali (direttiva define);
gestione array mediante operazioni sugli elementi (cicli while e for);
Codice C di esempio: minimo e massimo di una lista di valori e loro posizione nella lista.
- Ma.23/03/10, ore 09:00-11:00, aula Tonelli
Lezione 14.
Problema: determinare i numeri primi minori di un
numero assegnato (Crivello di Eratostene);
Inizializzazione di array in linguaggio C; array di caratteri e libreria string.h;
Problema: data una frase di parole separate da uno spazio, stamparle nello stesso
ordine, ma con le lettere invertite.
- Gi.25/03/10, ore 09:00-10:00, aula Tonelli
Lezione 15.
Puntatore (operatore &), deferenziazione (operatore *),
il costruttore puntatore, equivalenza fra array e puntatori.
- Ve 26/03/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: array e stringhe
- Lu.29/03/10, ore 09:00-11:00, aula Tonelli
Lezione 16.
Le funzioni in C: intestazione,
parametri formali, valore di ritorno, ecc.; chiamata di funzioni,
parametri attuali, ecc.; esempi di funzioni e chiamate;
Array monodimensionali come parametri di funzioni;
esempio di funzione somma degli elementi di una lista.
- Ma.30/03/10, ore 09:00-11:00, aula Tonelli
Lezione 17.
Problema: ordinare in senso crescente una lista di numeri;
metodo selection sort e bubble sort.
Array bidimensionali come parametri di funzioni;
esempio di funzione stampa tabella;
Problema: confronto fra stringhe per determinarne l'ordine alfabetico;
realizzata funzione int str_cmp(char *s1, char *s2).
- Gi.08/04/10, ore 09:00-10:00, aula Tonelli
Lezione 18.
Su strutture di controllo (for, do while, switch, break, operatori ? e :);
ambiente globale e locale.
- Ve 09/04/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: funzioni
- Lu.12/04/10, ore 09:00-11:00, aula Tonelli
Lezione 19.
Ambito di visibilita' delle variabili; durata delle variabili;
variabili statiche e automatiche; prototipo di funzioni; header file e funzioni
della standard library; tipi e argomenti della funzione main.
Esempi su puntatori.
- Ma.13/04/10, ore 09:00-11:00, aula Tonelli
Lezione 20.
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 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.15/04/10, ore 09:00-10:00, aula Tonelli
Lezione 21.
Allocazione dinamica della memoria: funzioni malloc e free.
esempi di informazioni organizzate a struct: lista linkata.
esempi di informazioni organizzate a struct: libreria di funzioni per gestire numeri complessi;
- Ve 16/04/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: strutture struct e I/O da file
- Lu.19/04/10, ore 09:00-11:00, aula Tonelli
Lezione 22.
Organizzazione della memoria: stack (LIFO) e heap;
rischi dell'allocazione dinamica: garbage collection e dangling reference; funzioni realloc e calloc;
Esempi di allocazione dinamica: lista linkata, matrice;
Programmazione C su piu' file: dichiarazione e definizione di oggetti;
dichiarazione extern.
- Ma.20/04/10, ore 09:00-11:00, aula Tonelli
Lezione 23.
File header, direttive #include, #ifndef #else #endif, #ifdef #endif,
#define, macro.
Commentati i file GCVec2dLib.c, GCVec2dLib.h, vect_ort.c nel'archivio arch5_230410.tgz.
Comandi di compilazione di piu' file;
Comando make e file Makefile; grafo delle dipendenze; costruzione di un Makefile;
sintassi; target; macro.
Makefile per la compilazione di un progetto esempio.
- Gi.22/04/10, ore 09:00-10:00, aula Tonelli
Lezione 24.
Ancora su Makefile; visionato insieme un piccolo esempio di programma su piu' file;
visionato insieme esercizio della tipologia 1 assegnato per il 23/04 "cerca parola".
- Ve 23/04/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: allocazione dinamica, programmazione su piu' file (librerie) e
Makefile
- Lu.26/04/10, ore 09:00-11:00, aula Tonelli
Lezione 25.
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).
Progettazione di algoritmi con rappresentazione grafica dei risultati;
problema esempio: disegno di un poligono regolare in coord. floating point;
- Ma.27/04/10, ore 09:00-11:00, aula Tonelli
Lezione 26.
Esempio: maxminarray.c, svolgimento esercizio Tipologia1; (ripasso puntatori e passaggio parametri)
Esempio: merge.c, svolgimento esercizio Tipologia3
Esempi di compilazione e analisi degli errori.
- Gi.29/04/10, ore 09:00-10:00, aula Tonelli
La lezione non ci sara' per indisponibilita' del docente.
- Ve 30/04/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI DI RECUPERO IN LABORATORIO: senza assistenza docente e tutor
- Lu.03/05/10, ore 09:00-11:00, aula Tonelli
Lezione 27.
Ripreso 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.
- Ma.04/05/10, ore 09:00-11:00, aula Tonelli
Lezione 28.
Introduzione alla libreria SDL e alle funzioni della libreria GCGraLib messe
a disposizione per fare grafica interattiva con programmazione C; visionati esercizi/programmi
della Tipologia1 assegnati per l'esercitazione di Laboratorio del 7/05.
- Gi.06/05/10, ore 09:00-10:00, aula Tonelli
La lezione non ci sara' per indisponibilita' del docente.
- Ve 07/05/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: grafica 2d interattiva
- Lu.10/05/10, ore 09:00-11:00, aula Tonelli
Lezione 29.
Strutture dati Stack/Pila e Queue/Coda. Ricorsivita' e funzioni ricorsive in linguaggio C (memoria stack).
Esempio: fattoriale di un numero; Esercizio: MCD di due numeri; ricorsione: 1.regola base, 2.regola
ricorsiva (2.1.dividi, 2.2.chiama, 2.3combina). Esempio: algoritmo di ordinamento ricorsivo (quick-sort);
progettazione di una funzione ricorsiva "quicksort" e di una funzione "cardine".
- Ma.11/05/10, ore 09:00-11:00, aula Tonelli
Lezione 30.
Progettazione non ricorsiva di una funzione ricorsiva mediante gestione di uno stack;
esempio su algoritmo quicksort (implementazione non ricorsiva in C).
Il backtracking: generazione di permutazioni; soluzione del problema delle torri degli
scacchi su una scacchiera nxn sia ricorsivamente che non. Alberi generici: terminologia e definizioni;
alberi binari: pieno, completo e heap;
- Ma.11/05/10, ore 11:00-13:00, aula Tonelli
Esercitiamoci insieme.
- Gi.13/05/10, ore 09:00-10:00, aula Tonelli
Lezione 31.
Memorizzazione di alberi binari completi con una lista; gestione di un heap
(costruzione, inserimento, ordinamento, ricerca); esempio: ordinamento mediante heap (heapsort).
- Ve 14/05/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: ricorsivita' e alberi binari
- Lu.17/05/10, ore 09:00-11:00, aula Tonelli
Lezione 32.
Elementi di elaborazione di immagini: introduzione alle funzioni della libreria
GCGraLib messe a disposizione per la visualizzazione di immagini.
Programmi presenti in ambiente Linux: display e import.
Visionato programma esempio rgb2gray.c per la conversione di una immagine a colori in livelli di grigio.
Scala e rotazione di una immagine: trasformazioni di scala e rotazione;
interpolazione componenti colore (nearest neighbor, bilinear interpolation e bicubic interpolation)
(vedi slide graph03_0910.pdf).
- Ma.18/05/10, ore 09:00-11:00, aula Tonelli
Lezione 33.
Introduzione al linguagio LaTex ed al suo utilizzo; esempi di sorgenti LaTex per la
composizione di formule e immagini. (vedi slide latex0910.pdf)
- Gi.20/05/10, ore 09:00-10:00, aula Tonelli
Lezione 34.
Visita di un albero binario: inorder, preorder, postorder, DFS e BFS;
generalizzazione ad alberi non binari.
Giochiamo insieme ad Othello/Reversi: visionato il programma KReversi.
Introduzione al gioco Othello/Reversi, oggetto del progetto d'esame.
- Ve 21/05/10, ore 09:00-14:00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO: elaborazione di immagini e LaTex
- Lu.24/05/10, ore 09:00-11:00, aula Tonelli
Lezione 35.
Giochi a due finiti; definizioni e albero di gioco; algoritmo MinMax; funzione di
valutazione per MinMax con profondità fissata; potatura alpha-beta dell'albero.
Presentato e discusso il progetto d'esame (vedi file .pdf relativo).
Torna alla
home page di Giulio Casciola