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:
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.