Algoritmi e strutture di dati Elementi Crediti: 6 Conoscenze: Concetti fondamentali del progetto ed analisi di algoritmi e di strutture dati efficienti. Abilità: Analisi e realizzazione di semplici algoritmi Docente/i: Paola Bonizzoni, Giancarlo Mauri Programma: 1. Introduzione Nozione intuitiva di problema e algoritmo. Insertion sort. Tecniche di progetto di algoritmi; algoritmi ricorsivi. L'algoritmo di merge-sort Analisi di costo degli algoritmi nel caso peggiore e in media. 2. Gli strumenti matematici Ordine di grandezza delle funzioni, notazione asintotica Sommatorie Equazioni di ricorrenza e relativi metodi risolutivi. Insiemi, relazioni, funzioni, grafi, alberi 3. Il problema dell’ordinamento e i principali algoritmi di soluzione Heapsort Quicksort Ordinamento in tempo lineare Mediano e selezione 4. Strutture dati elementari e loro implementazioni efficienti Liste, pile, code Tabelle hash Alberi liberi; alberi radicati Alberi binari di ricerca Rappresentazione di alberi in memoria Attraversamento di alberi binari: visita in pre-, post-, inordine Testi consigliati T. H. Cormen, C. E. Leiserson, R. L. Rivest, Introduzione agli algoritmi, Jackson Libri. Modalità di esame: L’esame comprende una prova scritta, il cui superamento è condizione per l’accesso a una eventuale prova orale. ANALISI MATEMATICA I (Elementi) CREDITI: 6 DOCENTI: Gabriella Kuhn , GiancarloTravaglini, Barbara Bacchelli , CONOSCENZE:Concetti fondamentali del calcolo differenziale e integrale per funzioni reali di variabile reale: continuita', derivabilita', approssimazione polinomiale, integrale definito, problema di Cauchy per equazioni differenziali del primo ordine, a variabili separabili e lineari ABILITA': Saper utilizzare gli strumenti del calcolo differenziale e integrale: grafico di una funzione, approssimazione polinomiale, calcolo di integrali definiti e di soluzioni di alcune equazioni differenziali WEB DEL CORSO: CONTENUTI: • • • • • • Funzioni. Dominio, immagine, periodicita', simmetrie, biunivocita', funzione inversa. Limiti di funzioni. Stime asintotiche. Grafici di funzioni elementari. Funzioni continue. Teorema degli zeri, proprieta' dei valori intermedi, esistenza di massimi e minimi. Derivate e regole di derivazione Teoremi del calcolo differenziale: Fermat, Rolle, Lagrange, De Hopital Studio del grafico di funzione. La formula di Taylor. Definizione di integrale secondo Riemann. Teorema della media Teorema fondamentale del calcolo integrale. Integrazione per parti e per sostituzione, integrazione di funzioni razionali. Equazioni differenziali e problema di Cauchy. Equazioni a variabili separabili e lineari del primo ordine LIBRI DI TESTO CONSIGLIATI: • • • • • R. Adams - Calcolo differenziale 1, Casa Editrice Ambrosiana M. Bertsch - Istituzioni di Matematiche, Boringhieri C.Pagani, S.Salsa - Matematica , Zanichelli B.Demidovich - Esercizi di Matematica , Zanichelli S.Salsa, A.Squellati - Esercizi di Matematica, calcolo infinitesimale e algebra lineare, Zanichelli MODALITA' DI ESAME: Consiste in una prova scritta e una orale. Durante il corso si terranno due prove scritte parziali, il superamento delle quali fara' accedere direttamente alla prova orale NOTE: G. Kuhn (corso a: A-D), G. Travaglini (corso b: E-O), B. Bacchelli (corso c: P-Z) Architettura degli elaboratori 1 (codice 011), anno 2001/02 Crediti 12 Conoscenze Lo studente apprende nozioni introduttive sul funzionamento dei calcolatori e della catena programmativa Abilità Comprendere e valutare gli avanzamenti tecnologici e architetturali. Comprendere le problematiche di valutazione delle prestazioni di un calcolatore. Programmazione assembly di base. Docenti R. Bisiani, M. Dominoni, C. Ferretti, D. G. Sorrenti, con la collaborazione di dr. F. Marchese, S. Gambaré, U. Jocher, P. Mereghetti, S. Ruocco. Programma 1. Concetti generali e basi di aritmentica intera Questo materiale è già stato in massima parte coperto dal corso di Informatica Generale. Dato cheè critico per questo corso, verrà brevemente ripreso. Ci si aspetta quindi una conoscenza più approfondita di quella acquisita in Informatica Generale. Ci si aspetta familiarità con le unità di misura elementari della fisica e con le rappresentazioni dei numeri usate in informatica: binaria ed esadecimale. Ci si aspetta che lo studente sappia convertire semplici numeri tra basi diverse e tra rappresentazioni intere e virgola mobile. 2. Nozioni di logica booleana e rassegna (analisi) di alcune circuiterie di riferimento In questa parte si spiegano i meccanismi di base di funzionamento dei circuiti che sono usati per costruire i calcolatori elettronici. Questi circuiti non sono spiegati dal punto di vista elettronico ma come circuiti logici. Questo materiale è assolutamente necessario per capire la parte seguente che invece spiega il vero e proprio funzionamento dei calcolatori elettronici. L’enfasi non è sulla sintesi di circuiti, ma nell’analisi. del loro funzionamento. (Porte logiche e tabelle di verità, circuiti combinatori, clock, circuiti sequenziali, circuiti di memoria). 3. Funzionamento di un calcolatore a livello di registri In questa parte si inizia ad illustrare la struttura interna dei calcolatori e della cpu. Si passa poi alla elencazione dei circutiti più rilevanti presenti all'interno della cpu, tra cui spicca il register file. 4. Rassegna del set di istruzioni della macchina di riferimento del corso (mips r2000/3000) In questa parte si illustrano i formati delle varie istruzioni, evidenziando le ragioni ed i compromessi adottati dal progettista e si presentano estesi esempi di uso delle stesse nella compilazione di strutture programmative in linguaggio di alto livello (C). Particolare attenzione viene data al supporto da parte della cpu alla esecuzione efficiente dei salti a procedura. 5. Ciclo fondamentale di funzionamento della In questa parte si illustra il ciclo fondamentale di funzionamento della cpu (fetch / decode / execute). 6. cpu Percorso dei dati e sua implementazione in versione a singolo ciclo di clock In questa parte si illustra il control path della macchina di riferimento e si dettaglia una possibile implementazione semplificata della unità di controllo, caratterizzata dal fatto che tutte le istruzioni hanno la stessa durata, determinata dalla più lenta tra queste. 7. Organizzazione della memoria e gerarchie Le gerarchie di memoria sono un meccanismo fondamentale per il funzionamento dei calcolatori elettronici. Questa parte è volta a far comprendere come un solo meccanismo è alla base, con parametri diversi, di molti componenti di un calcolatore elettronico. Ci si aspetta che gli studenti capiscano il funzionamento di cache, memoria virtuale e TLB; inoltre si richiede padronanza dei parametri fondamentali che controllano il funzionamento di queste strutture. 8. Aritmentica in virgola mobile Adottando particolari convenzioni standard e' possibile codificare un numero in virgolamobile nei bit di una parola di memoria. Lo standard preso inconsiderazione è IEEE 754, e lo si presenta descrivendo la notazione mantissa esponente ed alcuni criteri di approssimazione volti a conservare il maggior numero possibile di cifre significative nei calcoli. 9. Tecniche elementari di rilevamento e correzione degli errori Alcuni dispositivi di memoria contengono circuiti che controllano la correttezza dei dati conservati. Implementano tecniche di codifica dei dati che utilizzano dei bit di ridondanza. Si presentano le piu' semplici di queste tecniche, come quella basata sul bit di parità, e alcune formule che definiscono quantitativamente la bontà di un codice nel rilevare o correggere errori. 10. Tecniche di gestione dell'ingresso - uscita (controllo di programma, interruzione di programma, accesso diretto alla memoria) I dispositivi di ingresso uscita di un calcolatore possono colloquiare con il processore in diversi modi, a seconda dell'architettura della macchina: nel modo più semplice, a "controllo di programma", il processore continua ad interrogare la periferica per verificare la possibilità di trasferire dati. Altre modalità più evolute sono però disponibili, se si dispone di hardware in grado di supportarle: con riconoscimento da parte del processore di un segnale di interruzione proveniente dalla periferica, e con la possibilità per la periferica di scambiare i dati direttamente con la memoria. Di queste alternative vengono presentati principi, vantaggi e svantaggi, e si guida lo studente a capire quale tipo di periferiche è adatto ad ognuna di esse. 11. Nozioni di base di concorrenza e di servizi al sistema operativo Alcune parti dell'architettura hardware di un processore, e di un elaboratore nel suo complesso, sono progettate in modo da assecondare le esigenze di funzionamento di un moderno sistema operativo. Come esempi di questi servizi, permessi dalla struttura hardware, si delineano: la possibilita' di alternare in esecuzione concorrente nel processore diversi programmi, la separazione tra l'esecuzione dei programmi degli utenti e l'esecuzione delle parti del sistema operativo, e alcuni dettagli dei registri di controllo del processore utili all'avvio e al funzionamento del sistema operativo stesso. Testi consigliati • • David A. Patterson and John L. Hennessy, "Computer Organization and Design: The Hardware/Software Interface", 2nd ed., , Morgan & Kaufmann, 1997, ISBN 1-55860-428-6 edizione italiana: David A. Patterson and John L. Hennessy, "Struttura, Organizzazione e Progetto dei Calcolatori", Jackson Libri, collana Università, ISBN 8825615175 Andrew S. Tanenbaum, "Structured compter organization", 4th ed., Prentice-Hall International (UK), 1999, ISBN 0-13-020435-8 edizione italiana: Andrew S. Tanenbaum, "Architettura dei computer. Un approccio strutturato", UTET (Torino), 2000 Modalità di erogazione del corso e degli esami Il corso è leggermente cambiato di contenuti rispetto allo scorso anno (corso di codice 04n), in particolare nella trattazione della tematica "Percorso dei dati e sua implementazione in versione a singolo ciclo di clock", che in questo anno è svolta come sul testo "Computer Organization and Design: The Hardware/Software Interface", capitolo 5, paragrafo 5.3. Durante il corso verranno svolte delle prove (compitini); per essere ammessi alle prove è richiesta la frequenza obbligatoria al 70% delle esercitazioni in laboratorio. Le lezioni dei due turni hanno contenuti identici, per evitare affollamento si richiede di attenersi ai turni. Gli argomenti trattati sono tutti coperti a un livello di preparazione medio/alto dai testi indicati. Le lezioni sono quindi estremamente utili per facilitare lo studio degli argomenti. Le esercitazioni sono critiche per ottenere il livello di comprensione degli argomenti e la manualità necessari per superare l’esame. Gli esami (e le prove in corso d'anno) sono costituiti da una serie di domande erogate in aula informatica con un programma automatico di test. Le domande possono essere sia a risposta multipla che a risposta libera e comprendono la correzione di semplici programmi nell'assembly della macchina di riferimento. Link al web del corso http://old.disco.unimib.it/architettura1 Basi di Dati e Sistemi Informativi (elementi) Crediti: 6 Conoscenze: Il corso intende presentare i concetti fondamentali sulle basi di dati, sui relativi sistemi di gestione e elementi introduttivi ai sistemi informativi. Abilità: Progettare, realizzare e gestire una base di dati collocandola nel contesto più ampio dei sistemi informativi. Docenti: Carlo Mereghetti, Raimondo Schettini Programma Introduzione. Concetti generali. Sistemi informativi, sistemi organizzativi e sistemi informatici. Tipologie ed esempi di sistemi informativi. Concetto di informazione e dato. Introduzione a basi di dati e DBMS, modello dei dati, concetto di schema e istanza. Indipendenza logica e fisica dei dati e tipologia di linguaggi per basi di dati. Il modello relazionale. Modelli logici. Modello relazionale: relazioni e tabelle, schemi ed istanze, informazione incompleta e valori nulli, chiavi, vincoli di integrità. Linguaggi di interrogazione. Algebra relazionale: operatori di base e operatori derivati. Interrogazioni in algebra relazionale ed equivalenza di espressioni algebriche. SQL. Definizione dei dati in SQL. Definizione di interrogazioni in SQL: interrogazioni semplici, con operatori insiemistici, nidificate e con raggruppamento. Operazioni di inserimento, modifica e cancellazione. Definizione di viste. Cenni sull’integrazione di SQL nei linguaggi di programmazione. La progettazione concettuale. Metodologie di progettazione di basi di dati. Il modello Entità-Relazione. La progettazione logica. Ristrutturazione schemi E-R: eliminazione delle gerarchie, degli attributi composti e multivalore. Traduzione da schemi E-R a schemi relazionali. Testi consigliati • P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone, “Basi di Dati: Concetti, Linguaggi e Architetture”, Seconda Edizione, McGraw-Hill Italia, 1999. • Materiale didattico a disposizione ai siti del corso (vedi link sottostante). Modalità di esame. L’esame consiste di una prova scritta, eventualmente sostituibile da prove in itinere, e di una prova orale. Link al corso: http://old.disco.unimib.it/elementibasidati Informatica Generale Crediti: 6 Conoscenze: Organizzazione generale del calcolatore, comprendendo sia l’hardware che il software. Rappresentazione digitale dell’informazione. Organizzazione delle reti di calcolatori, del protocollo internet e di alcuni protocolli applicativi. Abilità: Utilizzo del calcolatore per quanto riguarda i servizi fondamentali offerti dal sistema operativo, alcuni strumenti di produttività (fogli elettronici e database). Testing (a livello elementare) di programmi. Docenti: Mauro Pezzè, Giovani Denaro, Luigi Lavazza Programma: Parte I: La struttura del calcolatore e della rete (come è fatto un calcolatore) l’evoluzione dell’informatica (cenni) la struttura modulare di un calcolatore e il concetto di astrazione o il livello dei dispositivi o struttura di un calcolatore o CPU, memoria, periferiche e bus La rappresentazione dell’informazione o rappresentazione binaria, ottale e esadecimale o rappresentazione in modulo e segno o rappresentazione in complemento a 2 o rappresentazione in eccesso o rappresentazione in virgola mobile o lo standard IEEE 754 o rappresentazione di informazione non numerica: caratteri, immagini, suono La rete o o o o o o o o o Parte II: reti e topologie commutazione a circuito e a pacchetto protocolli di comunicazione e astrazione i livelli ISO OSI Internet i protocolli IP, TCP e UDP il modello client/server protocolli applicativi: Telnet, FTP, HTTP, SMTP WWW e URL Il calcolatore come strumento di programmazione (come si usa il calcolatore per programmare) uso di base per la programmazione o struttura del file system o editor o compilatori ed interpreti verifica di un programma o errori statici e dinamici o test e debugging Parte III: Il calcolatore come strumento di servizio (come si usa un calcolatore per aumentare la produttività) principali strumenti di produttività o foglio elettronico o base di dati Testi consigliati: 1. G. Pelagatti, “Fondamenti di Informatica II – Programmazione in ambiente di rete”, Progetto Leonardo, Bologna, Aprile 1999 (cap. 1, 5, 6) 2. A.S. Tanenbaum, J.R.Goodman, “Architettura dei computer – Un approccio strutturato”, 4° edizione, UTET libreria, Torino, 2000 (cap. 1 e 2 e appendici) 3. Lucidi presentati a lezione, disponibili su www.lta.disco.unimib.it Modalità di esame: Prova scritta Link al corso: www.lta.disco.unimib.it/InfoGen/InfGen.htm Matematica Discreta (Elementi) 2001-2002 Crediti: 6 Conoscenze: conoscenze di matematica di base (Scuola Superiore) Abilità: uso delle tecniche di logica in un ragionamento matematico; tecniche di dimostrazione; linguaggio degli insiemi; nozioni introduttive su relazioni, grafi e reticoli; insieme delle classi di resto modulo n; matrici e sistemi lineari: Docenti: Docenti: Proff. M. Cazzola, F. Dalla Volta, M. Rigoli) Programma: 1. Elementi di logica delle proposizioni: Cenni di logica formale. Operazioni tra proposizioni: congiunzione, disgiunzione, o esclusivo, implicazione materiale, doppia implicazione, implicazione contronominale, proposizioni composte. Equivalenza di proposizioni: tautologie e contraddizioni, dimostrazioni dell'equivalenza di proposizioni. Quantificatori: quantificatore universale e quantificatore esistenziale; verità e falsità di proposizioni contenenti quantificatori, quantificatori multipli, negazione di un quantificatore. Tecniche di dimostrazione: deduzioni logiche fondamentali, dimostrazioni dirette e indirette, dimostrazioni per assurdo, dimostrazioni per induzione (prima e seconda forma). Esempi di deduzioni errate. 2 Insiemi: Come si denota un insieme, operazioni tra gli insiemi. Corrispondenze e applicazioni. Prodotto cartesiano, corrispondenze e relazioni. Applicazioni: iniettività, suriettività, biiettività. Applicazioni composte. Cardinalità di insiemi . 3 Numeri naturali e numeri interi: Divisione tra numeri interi, divisori e multipli, numeri primi (teorema fondamentale dell'aritmetica), esistenza di infiniti primi. Massimo comun divisore e minimo comune multiplo, algoritmo euclideo per il calcolo del MCD, identità di Bezout. Principio di induzione: prima e seconda forma. 4 Insiemi e relazioni: Grafo di una relazione. Equivalenze e partizioni, insieme quoziente. Insieme delle classi di resto modulo n. Ordinamenti: massimo, minimo, elemento massimale, elemento minimale, maggiorante, minorante, estremo inferiore, estremo superiore.. 5 Grafi e strutture algebriche Reticoli, reticoli booleani. Cammini e circuiti euleriani, alberi e grafi piani. Insiemi dotati di una operazione: gruppi. Insiemi dotati di più operazioni: anelli, campi. Esempi. 6 Matrici e sistemi lineari: Matrici a coefficienti in un campo, somma e prodotto di matrici Sistemi lineari a coefficienti in un campo: Sistemi equivalenti, discussione sull'esistenza delle soluzioni di un sistema lineare: metodo di triangolazione di Gauss. Testi consigliati: A. Facchini, Algebra e matematica discreta, Decibel--Zanichelli'' K. H. Rosen, Discrete Mathematics and Its Applications, McGraw-Hill'' (in particolare per gli elementi di logica) Modalità di esame: scritto e orale Link al corso: www.matapp.unimib.it/~marina/did/mdis01 Programmazione (Elementi + Complementi) Crediti: 12 Conoscenze: Concetti base di programmazione. Elementi di programmazione ad oggetti, elementi del linguaggio Java. Abilità: Alla fine del corso lo studente dovrà essere capace di progettare e sviluppare semplici programmi in Java. Docenti: Francesca Arcelli, Lucia Pomello, Francesco Tisato Programma: 1. Struttura logica di un elaboratore e codifica dell'informazione. Gerarchia dei linguaggi di programmazione, compilatori e interpreti. La Java Virtual Machine. Algoritmi e programmi, il paradigma ad oggetti. 2. Tipi di dati primitivi. Variabili, dichiarazioni e assegnamenti. Espressioni e valutazione. Type checking. Stringhe. Ingresso/uscita. 3. Strutture di controllo selettive e iterative. Esempi elementari di algoritmi. 4. Programmazione ad oggetti vs programmazione tradizionale. Information hiding e incapsulamento. Definizione di classe e creazione di oggetti/istanze. 5. Metodi, definizione e invocazione. Parametri di tipo primitivo. Modificatore di visibilita' sui metodi. 6. Precondizioni e postcondizioni per i metodi. Attributi privati alla classe e metodi di accesso. Costruttori. Overloading di metodi e di costruttori. 7. Metodi che accettano in ingresso oggetti e che restituiscono oggetti. Array di tipi primitivi e di reference. 8. Ereditarietà singola e multipla. La classe Object. Visibilità per attributi e metodi. Costruttori. 9. Le classi astratte e i metodi astratti. Polimorfismo e override di metodi. 10. Interfacce. Metodi di classe. Attributi di classe. 11. Lo sviluppo di semplici progetti. Testi consigliati: Walter Savitch, Java: An Introduction to Computer Science & Programming, Prentice Hall, 1998 Arnold Gosling, Java - Didattica e Programmazione, Addison Wesley, 1997 J. Lewis, W. Loftus, JAVA, Fondamenti di Progettazione del software, Addison Wesley, 2001. Modalità di esame: L'esame si articola in una prova scritta teorico - pratica e in un colloquio orale. Vengono inoltre svolte prove intermedie il cui superamento con esito positivo comporta l'esonero dalla prova scritta. Link al corso: http://mars.sal.disco.unimib.it/~p1-2001/