1 / 36

Il tipo boolean

Il tipo boolean. Un ponte tra due mondi. Una normativa.

ronald
Download Presentation

Il tipo boolean

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Il tipo boolean Un ponte tra due mondi AN Fondam98 Numeri

  2. Una normativa • Un certificato di residenza puo' venire rilasciato se il richiedente e' un uomo che possiede il certificato di lavoro e ha famiglia a carico, oppure se non ha il certificato di lavoro ma e' una donna con famiglia a carico, oppure se e' un uomo o donna maggiorenne con certificato di lavoro, oppure se non e' maggiorenne ma ha certificato di lavoro e famiglia a carico, oppure se e' minorenne senza famiglia a carico ma con certificato di lavoro AN Fondam98 Numeri

  3. Una diversa rappresentazione • u = e' un uomo • cl = ha il certificato di lavoro • fc = ha famiglia a carico • m = e' maggiorenne AN Fondam98 Numeri

  4. Una diversa rappresentazione • u = e' un uomo • cl = ha il certificato di lavoro • fc = ha famiglia a carico • m = e' maggiorenne AN Fondam98 Numeri

  5. Un teorema • Una arbitraria funzione f(A1,...,An) di n variabili booleane A1,...,An puo' essere espressa in uno e un solo modo in forma disgiuntiva normale cioe' come somma (or) di prodotti (and) delle n variabili. I prodotti si dicono mintermini della funzione. AN Fondam98 Numeri

  6. xor a b z 0 0 0 0 1 1 1 0 1 1 1 0 boolean xor(boolean a,boolean b){ return !a && b || a && !b; }//xor AN Fondam98 Numeri

  7. L’algebra di Boole Proprieta' commutativa: a+b=b+a; P1a a*b=b*a P1b Proprieta' associativa: (a+b)+c = a+(b+c) P2a (a*b)*c = a*(b*c) P2b Proprieta' di idempotenza: a+a=a P3a a*a= a P3b Proprieta' di assorbimento: a+(a*b) =a P4a a*(a+b) =a P4b Proprieta' distributiva: a * ( b + c )= a*b + a * c P5a a + (b * c)=(a+b) *(a+c) P5b AN Fondam98 Numeri

  8. L’algebra di Boole Proprieta' del minimo: a*0 =0 P6a Proprieta' del massimo: a+1=1 P6b Proprieta' del complemento: a * !a =0 P7a a+!a=1 P7b AN Fondam98 Numeri

  9. I vantaggi dell’algebra • I teoremi dell'algebra Booleana consentono di trasformare la espressione nella espressione equivalente: cl or (not u and fc ) • Il certificato di residenza viene rilasciato se il richiedente ha un certificato di lavoro oppure se e' una donna con famiglia a carico. AN Fondam98 Numeri

  10. Mappe di Karnaugh • Anziche' ricorerre direttamente ai teoremi dell'algebra Booleana per trovare la forma minima equivalente di una funzione booleana, i progettisti hardware sono soliti ricondursi ad una forma geometrica (mappa di Karnaugh) che riconduce l'adiacenza logica di due mintermini (il fatto che differiscono per un solo bit) ad adiacenza geometrica. • L'uso delle proprieta' di idempotenza e distributiva e' implicito nella individuazione di caselle adiacenti di 2p elementi (con p>1) detti raggruppamenti rettangolari AN Fondam98 Numeri

  11. Termini adiacenti c \ ab 00 01 11 10 0 1 11 1 1 1 0 0 0 !c!a!b+!c!ab= (distributiva) !c!a(!b+b)= !c!a !cab+!ca!b= !ca (distributiva) !c!a+!ca=!c (distributiva) AN Fondam98 Numeri

  12. La mappa di Karnaugh fc,m/u,cl 00 01 11 10 00 0 1 1 0 01 0 1 1 0 11 1 1 1 0 10 1 1 1 0 cl fc,m/u,cl 00 01 11 10 00 0 1 1 0 01 0 1 1 0 11 1 1 1 0 10 1 1 1 0 fc && !u AN Fondam98 Numeri

  13. Rappresentazione degli interi Strutture dinamiche o modifiche di stato? AN Fondam98 Numeri

  14. Una rappresentazione degli interi a0 a1 a2 a3 a4 a5 a6 a7ai = false o true ha la seguente interpretazione (essendo n=7): b0 2n + b1 2n-1 + ...+ b6 2n-6 + b7 2n-7 f f f f f f f f denota zero f f f f f f f t denota uno AN Fondam98 Numeri

  15. L’operazione succ Data la rappresentazione a0 a1 a2 a3 a4 a5 a6 a7 occorre determinare la rappresentazione b0 b1 b2 b3 b4 b5 b6 b7 tale che • a7=false : b7=true e bi=ai, per i=0,..,6; • a7=true: b7=false e bi=!ai per i=6,..,k tale che ai=true, e bi=ai per i=k-2,...,0; AN Fondam98 Numeri

  16. L’operazione succ Sono necessari n=8 passi computazionali tali che: • il risultato del passo kmodipenda dal risultato del passo (k-1)mo; • il risultato del passo kmo aggiunga una cifra binaria alla rappresentazione ottenuta nel passo (k-1)mo AN Fondam98 Numeri

  17. Generare informazione • Si introducono operazioni che permettano di costruire collezioni di dati. • Un’operazione di questo tipo e’ la concatenazione sul tipo String di Java. Infatti, date due stringhe s1 e s2 di lunghezza n1 e n2 rispettivamente, l’operazione s1+s2 restituisce una stringa di n1+n2 caratteri AN Fondam98 Numeri

  18. La rappresentazione come ADT intRep consIRep(boolean x,intRep bv) data la rappresentazione bv a n bit (1<=n<8) di un intero restituisce la rappresentazione di un intero di n+1 bit cosi’ formata: x bv0,…,bvn AN Fondam98 Numeri

  19. Il punto iniziale Per evitare un regresso all’infinito, viene data come primitiva la sequenza vuota emptyRep denotata anche mediante eR AN Fondam98 Numeri

  20. Il numero tre consIRep(false, consIRep(false, consIRep(true, consIRep(true, emptyRep)))); AN Fondam98 Numeri

  21. Altre operazioni primitive int length( intRep x) restituisce il numero di bit di x boolean bitAt(intRep x,int i) restituisce il valore del bit di posizione i-ma di x (0<=i<length(x)). boolean isEq(intRep x,intRep y ) restituisce true se x e y hanno la stessa configurazione di bit, false altrimenti AN Fondam98 Numeri

  22. Altre operazioni primitive String toString(intRep x) restituisce la rappresentazione binaria di x come stringa intRep shl( intRep x ) restituisce la rappresentazione di x traslata di una posizione a sinistra intRep shr( intRep x ) restituisce la rappresentazione di x traslata di una posizione a destra AN Fondam98 Numeri

  23. succ 0100 => 0101 0011 => 0100 AN Fondam98 Numeri

  24. succ: specifica eseguibile intRep succ(intRep a ){ //a e’ un intero rappresentato da length(a) bit int n=length(a)-1;//indice componente meno significativa return(!bitAt(a,n)) ?//tuuto uguale ad a tranne a[n] copyRep(a,0,n,consIRep(!bitAt(a,n),eR)) : compl(a,n,consIRep(!bitAt(a,n),eR)); } AN Fondam98 Numeri

  25. copia intRep copyRep( intRep a,int n1,int n,intRep v){ //v e’ la copia corrente di a fino ad a[n] essendo n1 <= n //copia la rappresentazione di a fino ad a[n1] return (n1==n) ? v : copyRep( a,n1,n-1, consIRep(bitAt(a,n-1),v)); } AN Fondam98 Numeri

  26. Propagazione del complemento intRep compl(intRep a,int n,intRep v){ //somma 1 con la tecnica del complemento del bit i-mo //v e’ il risultato dalla fine di a alla componente di indice n return (n==0) ? v : (bitAt(a,n-1))? compl(a,n-1,consIRep(!bitAt(a,n-1),v)) :(n==1) ? consIRep(!bitAt(a,0),v) :copyRep(a,0,n-2,consIRep(bitAt(a,n-2), consIRep(!bitAt(a,n-1),v))); } AN Fondam98 Numeri

  27. Complemento a due v + (-v) = 2n (-v) = 2n – v = 2n – 1 – v + 1 Il valore di 2n–1 e’ rappresentato da una collezione n bit di valore 1. Quindi la rappresentazione del valore di 2n–1–v si ottiene complementando ogni bit della rappresentazione di v. Questa operazione si dice anche complemento a1. AN Fondam98 Numeri

  28. Complemento a uno intRep compl1( intRep v, int n, intRep vc1 ){ //vc1 e’ il complemento a 1 della rappresentazione di v //dal bit meno significativo fino al bit di indice n compreso return (n==0) ? vc1 : compl1(v,n-1, consIRep(!bitAt(v,n-1),vc1)); } AN Fondam98 Numeri

  29. Somma binaria • r\a,b 00 01 11 10 | 00 01 11 10 • 0 0 1 0 1 | 0 0 1 0 • 11 0 1 0 | 0 111 • somma s riporto r’ S = !r*(!a*b+a*!b) + r*(!a*!b+a*b) = = !r*(a xor b) + r*!(a xor b) = = r xor (a xor b) r’ = !r ( a xor b) + a*b AN Fondam98 Numeri

  30. Full adder a b r sfn mfn r’ s AN Fondam98 Numeri

  31. Somma di due bit con riporto boolean mfn(boolean a,boolean b,boolean r){ return xor(r, xor( a, b )); }//mfn boolean sfn(boolean a,boolean b,boolean r ){ return r && xor( a, b ) || ( a && b ); }//sfn AN Fondam98 Numeri

  32. Full adder intRep fa( boolean a,boolean b,boolean r){ //full adder: restituisce una coppia di bit return consIRep(sfn(a,b,r), consIRep(mfn(a,b,r),eR) ); }//fa AN Fondam98 Numeri

  33. Una macchina per sommare AN Fondam98 Numeri

  34. Sommatore a N bit intRep FA( intRep a, intRep b){ //full adder a N (N>1) bit: restituisce la rappresentazione di a+b //IPOTESI: length(a)=length(b)=N return FA(a,b,length(a),eR,false); } AN Fondam98 Numeri

  35. FA a N bit che usa fa a due bit intRep Fa( intRep a,intRep b, int n,intRep s,boolean r ){ //full adder a N (N>1) bit //s e’ la rappresentazione della somma dei bit meno significativi fino a n //r e’ il valore corrente del riporto intRep sbn=fa(bitAt(a,n-1),bitAt(b,n-1),r); return(n==1)?consIRep(bitAt(sbn,1),s): Fa(a,b,n-1, consIRep(bitAt(sbn,1),s),bitAt(sbn,0)); }//Fa AN Fondam98 Numeri

  36. FA a N bit che usa mfn e sfn intRep FA( intRep a,intRep b, int n,intRep s,boolean r ){ //s e’ la rappresentazione della somma dei bit meno significativi fino a n //r e’ il valore corrente del riporto return(n==0)? s : FA(a,b,n-1,consIRep( mfn(a.bitAt(n-1),b.bitAt(n-1),r),s), sfn(a.bitAt(n-1),b.bitAt(n-1),r)); }//FA AN Fondam98 Numeri

More Related