Informatica I (C.d.S. in Matematica) A.A.2006/07
Argomenti trattati a Lezione
- Lu.19/02/07, ore 11.00-13.00, aula Tonelli, Lezione 1.
Introduzione al corso; scheda Orario Corso;
scheda informativa da restituire; concetto di algoritmo per calcolatore; schema
di Von Neumann di un calcolatore: Input, CPU, Memoria, Output.
- Me.21/02/06, ore 11.00-13.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, sequenza, scelta (espressioni miste aritmetiche, relazionali
e logiche), lettura/scrittura, inizio/fine.
Problema esempio: progettazione dell'algoritmo in pseudolinguaggio.
- Ve.23/02/07, ore 11.00-13.00, aula Tonelli, Lezione 3.
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.26/02/07, ore 11.00-13.00, aula Tonelli, Lezione 4.
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; struttura di controllo procedura;
la procedura nel pseudolinguaggio usato; passaggio parametri per valore
e per indirizzo.
- Me.28/02/07, 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 rem (suggerito di progettare procedura div) e suo utilizzo per l'MCD;
strutture dati lista e tabella; allocazione statica della memoria.
- Ve.2/03/07, ore 11.00-13.00, aula Tonelli, Lezione 6.
Problema: minimo fra gli elementi di una lista; progettazione di
una procedura min_lista e di un main; simulazione di esecuzione; stessa
procedura min_lista con passaggio lista per indirizzo; lettura e
memorizzazione di una tabella; passaggio di una tabella ad una procedura.
Assegnati 5 esercizi di cui e' richiesto lo svolgimento di
almeno due in modo completo.
- Lu.5/03/07, 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, editor di testo,
comandi base per la gestione di file.
- Me.07/03/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.08/03/07, 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);
strutture di controllo if e while; comandi di compilazione e linking;
comando di esecuzione.
- Ve.09/03/07, ore 11.00-12.00, aula Tonelli.
CORREGGIAMO INSIEME GLI ESERCIZI ASSEGNATI!!
- Lu.12/03/07, ore 11.00-13.00, aula Tonelli, Lezione 9.
Errori in compilazione, in linking, in esecuzione; cenno a compilatori vs interpreti;
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.
Problema: conversione di una intero positivo da base 10 a base B; progettazione
dell'algoritmo.
- Me.14/03/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.15/03/07, ore 11.00-13.00, aula Tonelli, Lezione 10.
typedef per dichiarazione "nuovi tipi" (ridefinizione o enumerazione esplicita dei valori);
tipi strutturati: il costruttore array;
dichiarazione di array mono e multidimensionali (dichiarazione const e direttiva define);
gestione array mediante operazioni sugli elementi (cicli while e for).
- Lu.19/03/07, ore 11.00-13.00
La lezione è sospesa per consentire di assistere al seminario "Disegnare con
la matematica" che si terra' dalle ore 11:00 alle 13:00 in aula Cremona.
- Me.21/03/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.22/03/07, ore 11.00-13.00, aula Tonelli, Lezione 11.
puntatore (operatore &), deferenziazione (operatore *),
dichiarazione di "tipo puntatore", 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.
Problema: ordinare in senso crescente
una lista di numeri; metodo selection sort e bubble sort.
- Lu.26/03/07, ore 11.00-13.00, aula Tonelli, Lezione 12.
Complessita' computazionale: calcoli trattabili e non trattabili;
Array monodimensionali e bidimensionali come parametri di funzioni;
esempi: ordinamento di liste e stampa tabelle;
ambiente globale e locale; prototipo di funzioni;
- Me.28/03/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.29/03/07, ore 11.00-13.00, aula Tonelli, Lezione 13.
Ambito di visibilita' delle variabili; durata delle variabili;
funzioni predefinite (standard library).
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.
- Lu.02/04/07, ore 11.00-13.00, aula Tonelli, Lezione 14.
Esempi di informazioni organizzate
a struct: numeri complessi e lista linkata.
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. Argomenti della funzione main.
- Me.4/04/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Me.11/04/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.12/04/07, ore 11.00-13.00, aula Tonelli, Lezione 15.
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; funzionamento del compilatore e del linker.
Commentate le funzioni decomp e solve presenti nell'archivio arch_matfat.tgz.
- Lu.16/04/07, ore 11.00-13.00, aula Tonelli, Lezione 16.
Dettagli su strutture di controllo (for, do while, switch, break, operatori ? e :);
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 R sempre in A; fase di soluzione
in avanti sfruttando le informazioni memorizzate, ma senza ricostruire la matrice
L della fattorizzazione PA=LU;
- Me.18/04/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.19/04/07, ore 11.00-13.00, aula Tonelli, Lezione 17.
Comando make e file Makefile; grafo delle dipendenze;
costruzione di un Makefile; sintassi; target; macro.
Compilazione e linking su piu' file con libreria gra2d_lib;
Makefile di esempio per i programmi draw_fun, polygon, polygonf e inter_polygon che utilizzano
le funzioni di visualizzazione grafica 2d.
Elementi di grafica 2D: finestra grafica (window schermo o viewport), pixel,
sistema di coordinate, risoluzione;
introduzione alle funzioni della gra2d_lib messe a disposizione per ottenere un output grafico
con programmazione C: funzioni di inizializzazione, setting e disegno.
- Lu.23/04/07, ore 11.00-13.00, aula Tonelli, Lezione 18.
Gestione dell'interattivita' tramite programmazione event-driven.
Progettazione di algoritmi con rappresentazione grafica dei risultati
(esempio: disegno di un poligono regolare);
calcolo e disegno direttamente in coord. schermo (file polygon.c);
trasformazione window-viewport: funzione wind_view() di trasformazione
window-viewport;
calcolo in coord. reali e disegno in coord. schermo (file polygonf.c);
grafico di una funzione: discretizzazione in punti (tabulazione), determinazione window,
mapping window-vieport con conservazione del rapporto rapporto width/height, disegno.
- Me.02/05/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.03/05/07, ore 11.00-13.00, aula Tonelli, Lezione 19.
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 (anche showrgb).
Informazione colore e componenti RGB; esaminato codice main di 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).
- Lu.07/05/07, ore 11.00-13.00, aula Tonelli, Lezione 20.
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.09/05/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.10/05/07, ore 11.00-13.00, aula Tonelli, Lezione 21.
Esempio di allocazione e gestione di una lista linkata.
Struttura dati STACK e sua gestione mediante array e lista linkata.
Ricorsivita': esempi di funzioni ricorsive; gestione della ricorsione e memoria stack;
esempio del fattoriale di un numero; algoritmo di ordinamento quick-sort.
- Lu.14/05/07, 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). Struttura dati albero: definizioni e rappresentazione
in memoria; alberi binari: albero completo e heap; funzione di costruzione e inserimento
di un heap.
- Me.16/05/07, ore 14.00-18.00, Laboratorio Linux.
ESERCITAZIONI IN LABORATORIO
- Gi.17/05/07, ore 11.00-13.00, Pincherle, Lezione 23.
Gestione di un heap: funzione adjust e heapfy; algoritmo heap-sort; visita di un albero
depth first e breadth first; alberi di ricerca; algoritmo Best First Heuristic Search (A*)
e Iterative Deepening A* (IDA*).
Presentazione del progetto per l'esame: Sliding Puzzle.
Torna alla
home page di Giulio Casciola