Fondamenti di Informatica per Biomedica

Luigi Rizzo, Universita` di Pisa

Nel seguito si trova il programma del corso svolto nel 2014-2015 insieme ad alcuni link a testi di riferimento.

Per esercitarsi in javascript si possono usare alcuni ambienti quali kodtest jsbin jsfiddle liveweave, jsenv,

02/03/2015: introduzione al corso. Struttura a blocchi di un sistema di elaborazione: trasduttori di ingresso e uscita, blocco di elaborazione. Definizione di variabile booleana e bit. Distinzione tra circuiti combinatori e sequenziali. Circuiti combinatori, descrizione come tabella di verita`. Circuiti combinatori elementari: AND, OR, NOT. Costruzione di AND e OR a N ingressi partendo da porte a 2 ingressi. Struttura lineare e ad albero - ritardo di propagazione. Traduzione di una tabella di verita` in una espressione di tipo SP. Relazioni di De Morgan. Porte universali (es. NAND) e costruzione delle varie porte a partire dalla NAND.
Testi: Kana, pg.17-36 e 47-54

05/03/2015: Minimizzazione di forme SP sfruttando le identita` booleane A+A=A, A+/A=1, A*/A=0 ecc. Accenno al problema delle alee. Sintesi di funzioni complesse mediante scomposizione: esempi, comparatore a N cifre, Rappresentazione in base 2 dei numeri naturali, scomposizione del sommatore a N cifre in sommatori elementari. Sottrazione tra numeri naturali mediante rappresentazione in complemento a 2. Accenni all'algoritmo di moltiplicazione. Schematizzazione a blocchi di una ALU.
Testi: Kana, pg.55-65

09/03/2015: Dalle reti combinatorie a quelle sequenziali. Descrizione mediante diagramma di transizione. Realizzazione con reti combinatorie e feedback. Esemplificazione mediante sintesi di un flip flop set reset. Esempio di caso in cui la reazione provoca una oscillazione. Realizzazione stabile sfruttando stati non specificati. Distinzione tra flip flop trasparenti e non trasparenti. Diagramma di transizione di D edge triggered (senza sintesi). Inizio descrizione di un semplice processore con registri e ALU.

12/03/2015: Reti sequenziali sincronizzate. Esempio: contatore sincrono base 6 con abilitazione. Registri con abilitazione. Parte controllo di un processore: accesso alla memoria, invio di istruzioni alla ALI. Uso di reti sincronizzate per realizzare la parte controllo di un processore.

16/03/2015: Istruzione di salto condizionato. Costruzione di funzioni con cicli. Chiamata di funzioni. Lo stack per la gestione dell'indirizzo di ritorno.
Strumenti: Simulatore della CPU vista a lezione

19/03/2015: Dall'assembler a un linguaggio di programmazione. Identificatori. Espressioni: operatori unari e binari. Operatori di confronto. Variabili e tipi. Esemplificazione in Javascript: Bool, Number, String. Conversione di tipo. Operatori di confronto. Operatori logici di corto circuito. Dichiarazione e chiamata di funzione.
Testi: Javascript basics

Lun23/03/2015: Statement per il controllo del flusso: if/else, switch, for, while, do/while, break e continue. Variabili globali e locali. Gestione delle variabili locali mediante stack. Regole di visibilita` (per funzione o per blocco).

26/03/2015: Passaggio di argomenti per valore e per nome. I vettori: creazione, modifica, passaggio a funzioni. Valori di ritorno primitivi e di tipo Array. Accenni a valutazione di complessita` degli algoritmi. Semplice esempio di manipolazione di un vettore in tempo lineare e quadratico.

30/03/2015: Il tipo Object. Attributi, creazione distruzione e modifica. Scrittura di semplici programmi in Javascript nel browser. Modello di input e output in javascript. getElementById(), innerHTML, value per elementi di input

09/04/2015: Algoritmi di uso generale. Ricerca in vettore non ordinato. Ricerca binaria. Valutazione della complessita`. Ordinamento: insertion sort. Valutazione della complessita`
Testi:

  • Kahn academy algorithms

    13/04/2015: Algoritmi: ricerca binaria (ricorsivo). Merge sort: definizione algoritmo, valutazione della complessita`, implementazione in javascript. Funzioni hash e tabelle hash.

    16/04/2015: liste e alberi. Applicazioni e definizioni. Lista unidirezionale, procedura di inserimento ordinato, in testa e in coda. Valutazione del costo delle operazioni. Applicazioni: la coda (FIFO) e lo stack (LIFO)

    20/04/2015: Estrazione da una lista unidirezionale: estrazione dalla testa o di un elemento generico. Strutture ad albero: descrizione della struttura. Procedura di inserimento e valutazione della complessita`. Ricerca all'interno di un albero. Operazione di rimozione di elementi da un albero: discussione.

    27/04/2015: Visita di alberi binari. Cancellazione di elementi da alberi binari.

    27/04/2015: Esempio esercizi di esame su liste e mappe.

    30/04/2015: Le regular expressions come meccanismo per definire la struttura di sequenze di simboli. Applicazione delle RegExp al metodo split() delle stringhe. Esempi di costruzione di programmi Javascript che leggono e scrivono su elementi HTML, e manipolano stringhe mediante regular expression.

    04/05/2015: Funzioni di libreria del Javascript. Descrizione di alcuni metodi su String, Number, Math e Array. Stringhe: substr(), estrazione di singoli caratteri, join(). Esempio di implementazione del metodo join(). Differenza tra carattere (stringa in javascript) e suo codice ASCII. Math: funzioni trigonometriche, logaritmi, conversioni in stringa con toFixed() e toPrecision(). Array: push(), pop(), unshift(), shift(), splice(). Il meccanismo delle eccezioni (try/catch): descrizione della sintassi, funzionamento e applicazioni.

    04/05/2015: Altre funzioni di libreria: Math.random() e sue applicazioni. Esempio: montecarlo simulation. Gestione degli eventi: addEventHandler() ed esempi di eventi (mouse, tastiera, touch). Gestione del timer: setTimer() e setInterval(), l'oggetto Date. Accenni all'elemento canvas dell'HTML e relativi metodi metodi Javascript per la sua manipolazione.

    11/05/2015: Attributi e metodi dei canvas. Costruzione e ricostruzione di un disegno (animazione). Gli style sheet (CSS), principali proprieta` per definire l'aspetto di elementi html. Selettori (ID, classe, tipo di tag), specifica dei colori, box model, profondita`. Esempio: costruzione di un front end per elettrocardiogramma con dati e griglia.

    Materiale di riferimento

  • A.F Kana, Digital Logic Design, UC Davis local copy
  • UAF, Lawlor, CPU design
  • Javascript Basics by Rebecca Murphey local copy
  • bucknell 1
  • Logic Gates, TUIASI
  • Bucknell 2
  • Simulatore della CPU vista a lezione