Algebra Booleana.

Slides:



Advertisements
Presentazioni simili
Algebra di Boole Casazza Andrea 3EA I.I.S. Maserati.
Advertisements

Elaborazione dei segnali mediante circuiti analogici o digitali.
Informatica Generale Marzia Buscemi IMT Lucca
(sommario delle lezioni in fondo alla pagina)
Algebra di Boole ed elementi di logica
Algebra di Boole ed elementi di logica
Corso di Informatica (Programmazione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Programmazione Corso di laurea in Informatica
L'algebra di Boole e le sue applicazioni
Indice: L’algebra di Boole Applicazione dell’algebra di Boole
Analisi e sintesi di circuiti combinatori. Reti combinatorie.
Algebra di Boole.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algebra di Boole ed elementi di logica Marco D. Santambrogio – Ver. aggiornata.
Algebra di Boole.
Calcolo letterale.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Circuiti logici.
Corso di Laurea in Ingegneria dell’Informazione
I Monomi -3.a.b2 -3ab2.
Rappresentazione dell'informazione
Algebra di Boole L’algebra di Boole è un formalismo che opera su variabili (dette variabili booleane o variabili logiche o asserzioni) che possono assumere.
Rappresentazione in virgola mobile (floating-point) Permette di rappresentare numeri con ordini di grandezza molto differenti utilizzando per la rappresentazione.
Rappresentazione dell'informazione 1 Se ho una rappresentazione in virgola fissa (es. su segno e 8 cifre con 3 cifre alla destra della virgola) rappresento.
Algebra di Boole.
Algebra di Boole ?.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algebra di Boole ed elementi di logica Marco D. Santambrogio – Ver. aggiornata.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Algebra di Boole ed elementi di logica Marco D. Santambrogio – Ver. aggiornata.
Esercizio n o 3 Si realizzi una calcolatrice a 32 bit con interfaccia “normale” (decimale) con LabView, utilizzando SOLAMENTE: –convertitore decimale (input)
Logica di base e Conversione analogico-digitale Lezione 3 / Prima parte Gaetano Arena e.mail: 1.
VARIABILI E SCALE DI MISURA. Argomenti della lezione   Variabili   Concetto di Misura   Sistemi Relazionali Empirici   Sistemi Relazionali Numerici.
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
Parte 2 Programmare in Matlab – I Sommario: Introduzione: m-file Strutture condizionali e cicli –Istruzione “if” + Operatori logici in MatlabIstruzione.
1 La Unità Aritmetico Logica. Aritmetica 32 operation result a b ALU.
Operatori logici.
Introduzione al linguaggio C
Linguaggio C: Espressioni
Insiemi e logica Insiemi e operazioni insiemistiche
Logica binaria Moreno Marzolla
Definizione e caratteristiche
4 < 12 5 > −3 a < b a > b a ≤ b a ≥ b
Unità di apprendimento 7
PARTE TERZA OPERAZIONI CON LE PROPOSIZIONI
TIPI PRIMITIVI TIPI STRUTTURATI
Ripasso… Elementi di logica
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Le congruenze mod m e l'insieme Zm.
Algebra di Boole ed elementi di logica
Lezione 5: Algebra di Boole
I MONOMI.
Abbiamo visto Struttura di un programma Commenti
Algebra di Boole e sue applicazioni
Circuiti digitali Architettura © Roberto Bisiani, 2000
Linguaggio C++ Selezione.
Strutture di Controllo
Secondo Programma in C.
Elementi di base per lo studio dei circuiti digitali
© 2007 SEI-Società Editrice Internazionale, Apogeo
L’unità frazionaria ESEMPIO Rappresentazione
Algebra di Boole e Funzioni Binarie
Algebra di Boole ed elementi di logica
Reti Combinatorie E Algebra Di Boole
Programmazione e Laboratorio di Programmazione
Selezione e Proiezione
Reti Combinatorie: sintesi
La programmazione strutturata
Modello matematico per la risoluzione dei problemi
Definizione e caratteristiche
Programmazione Procedurale
Concetti di base Esercitazioni Dott.ssa Badiglio S.
Transcript della presentazione:

Algebra Booleana

Boolean Il nome boolean viene da George Boole, un matematico che inventò delle strutture matematiche, dette appunto algebre di Boole valori ha solo due valori: vero (1) e falso (0) operazioni operatori logici not, ¬, (unario) and, ∧, • (binario) or, ∨, + (binario)

Tavole di verità: not

Esempi di not x: «piove» VERO not x: «non piove» FALSO Posso scrivere: not x oppure ¬x oppure x

Tavole di verità: and Posso scrivere: x and y oppure x ∧ y oppure

Esempi di and x: "Benevento è capoluogo di provincia" VERO y: "il Molise è una regione del Nord d’Italia" FALSO x and y: "Benevento è capoluogo di provincia e il Molise è una regione del Nord d’Italia " x: “la terra è un pianeta" y: “la luna è un satellite della terra" “la terra è un pianeta e la luna è un satellite della terra"

Tavole di verità: or Posso scrivere: x or y oppure x ∨ y oppure x + y

Esempi di or x: "Benevento è capoluogo di provincia" VERO y: " il Molise è una regione del Nord d’Italia " FALSO z: "Benevento è capitale d'Italia" x or y: "Benevento è capoluogo di provincia oppure il Molise è una regione del Nord d’Italia " y or z: " il Molise è una regione del Nord d’Italia oppure Benevento è capitale d'Italia"

Precedenza operatori logici

Esempio Se a è vero b è falso c è falso a or b and c ? a or (b and c)

Tabella di verità di: a or (b and c)

Teoremi fondamentali

Valgono le proprietà distributive x and (y or z)=(x and y) or (x and z) "mi piace" e ( "ho i soldi" oppure "ho la carta di credito") = ("mi piace" e "ho i soldi") oppure ("mi piace" e "ho la carta di credito")

Regole di De Morgan

Approfondimento Rappresentazione circuitale delle operazioni logiche

Porte Logiche

and realizzato con interruttori

and realizzato con interruttori

Esempio

y = ((a or b) and (not c)) or (c and d)

y = ((a or b) and (not c)) or (c and d)

Semplificazione Il vantaggio dell’algebra di Boole sta nel fatto di permettere la semplificazione dei circuiti Esempio F = x•y•z + x•y•z + x•z (distributiva) = x•y•(z+z) + x•z (inverso) = x•y•1 + x•z (identità) = x•y + x•z

Le due funzioni sono equivalenti: hanno la stessa tabella di verità ma la seconda funzione è realizzabile con un circuito più semplice

Condivisione di input

Booleani in C In C non è presente il tipo booleano; esso viene simulato utilizzando gli interi con la convenzione che: 0 rappresenta falso qualunque numero diverso da 0 rappresenta vero Le operazioni logiche sono: not -> ! and -> && or -> || Restituiscono 0 quando il risultato è falso, 1 quando il risultato è vero

Esempi #include<stdio.h> main() { } int i=3, j=2, k=0, ris; ris = i && j; // ris vale 1 ris = i && k; // ris vale 0 ris = i || k; // ris vale 1 ris = !(i && k); // ris vale 1 ris = !i && k; // ris vale 0 }

Esempi sbagliati a && // omesso un operando a & & b // spazio non permesso

Tipi Ordinati Sono ordinati: interi, reali, caratteri Su un tipo ordinato sono definiti gli operatori di relazione

Operatori Relazionali == uguale != diverso < minore <= minore o uguale > maggiore >= maggiore o uguale Restituiscono 0 quando il risultato è falso, 1 quando il risultato è vero

Attenzione == diverso da = uguaglianza assegnamento

Esercizio Scrivere le espressioni booleane che determinano se: 1. il valore di una variabile i è nell’intervallo da 1 a 100, estremi inclusi 2. il valore di una delle due variabili intere j e k è multiplo dell’altro 1. (i>=1) && (i<=100) 2. (j % k == 0) || (k % j == 0)

Se scrivo #include<stdio.h> main() { } int j=9; int k=0; int ris; ris =(j % k == 0) || (k %j == 0); printf("%d\n", ris); }

Che succede?

Una soluzione #include<stdio.h> main() { } int j=9; int k=0; int ris; ris = (k!=0) && (j!=0) && ((j % k == 0)||(k %j == 0)); printf("%d\n", ris); }

Perché funziona Il compilatore C è sufficientemente furbo da interrompere la valutazione di un’espressione non appena determina la verità o la falsità dell’intera espressione E1 && E2 Viene valutata E1. Se E1 è falsa non viene valutata E2 perché in ogni caso l’intera espressione sarà falsa. Se E1 è vera allora viene valutata E2.

Lo stesso per || E1 || E2 Viene valutata E1. Se E1 è vera non viene valutata E2 perché in ogni caso l’intera espressione sarà vera. Se E1 è falsa allora viene valutata E2. Questo modo di valutare le espressioni, velocizza le operazioni, perché non esegue operazioni inutili

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; ris = (a>b); ris = (a+b) * (a<b); ris = (a+b) && (a<b); ris = (a+b) || (a>b); ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); ris = (a+b) * (a<b); ris = (a+b) && (a<b); ris = (a+b) || (a>b); ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); ris = (a+b) && (a<b); ris = (a+b) || (a>b); ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); ris = (a+b) || (a>b); ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); // 1 ris = (a+b) || (a>b); ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); // 1 ris = (a+b) || (a>b); // 1 ris = (a*c-b) || (a>b); ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); // 1 ris = (a+b) || (a>b); // 1 ris = (a*c-b) || (a>b); // 0 ris = ((a*c) != b) || (a>b); ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); // 1 ris = (a+b) || (a>b); // 1 ris = (a*c-b) || (a>b); // 0 ris = ((a*c) != b) || (a>b); // 0 ris = (a>b) || (a<c) || (c==b);

Esercizio Se le variabili intere a, b e c hanno rispettivamente valore 3, 12 e 4, quale valore viene assegnato alla varabile intera ris dalle seguenti espressioni? ris = a+b*c; // 51 ris = (a>b); // 0 ris = (a+b) * (a<b); // 15 ris = (a+b) && (a<b); // 1 ris = (a+b) || (a>b); // 1 ris = (a*c-b) || (a>b); // 0 ris = ((a*c) != b) || (a>b); // 0 ris = (a>b) || (a<c) || (c==b); // 1

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); printf("%d\n", (x || a)); printf("%d\n", x + (a==b)); printf("%d\n", !(x||(x<y))==(!x && x>=y)); printf("%c\n", a*(x||y));

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); // 1 printf("%d\n", (x || a)); printf("%d\n", x + (a==b)); printf("%d\n", !(x||(x<y))==(!x && x>=y)); printf("%c\n", a*(x||y));

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); // 1 printf("%d\n", (x || a)); // 1 printf("%d\n", x + (a==b)); printf("%d\n", !(x||(x<y))==(!x && x>=y)); printf("%c\n", a*(x||y));

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); // 1 printf("%d\n", (x || a)); // 1 printf("%d\n", x + (a==b)); // 12 printf("%d\n", !(x||(x<y))==(!x && x>=y)); printf("%c\n", a*(x||y));

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); // 1 printf("%d\n", (x || a)); // 1 printf("%d\n", x + (a==b)); // 12 printf("%d\n", !(x||(x<y))==(!x && x>=y)); // 1 printf("%c\n", a*(x||y));

Esercizio Supponendo che le variabili intere x, y abbiano valori 12 e 45, rispettivamente e che le variabili carattere a e b abbiano rispettivamente valori 't' e 'T', cosa stampano le seguenti istruzioni? printf("%d\n", (x>y) || (a!=b)); // 1 printf("%d\n", (x || a)); // 1 printf("%d\n", x + (a==b)); // 12 printf("%d\n", !(x||(x<y))==(!x && x>=y)); // 1 printf("%c\n", a*(x||y)); // t

Si considerino le seguenti 4 variabili: luiamalei leiamalui luisoldi leisoldi Scrivere l’istruzione di assegnamento sisposano = … affinché due persone si sposino è necessario che entrambe si amino e che almeno una dei 2 abbia i soldi (per il matrimonio)

Soluzione sisposano = luiamalei && leiamalui && (luisoldi || leisoldi); Si può verificare facilmente che la variabile SISPOSANO assumerà valore 1 solo nel caso in cui: LUIAMALEI vale 1 LEIAMALUI vale 1 LUISOLDI vale 1 oppure LEISOLDI vale 1

Esercizio Valutare e disegnare i circuiti F = (not a) and b G = (not a) or b

Soluzione

Esercizio Costruire circuiti che producono i seguenti output: a) (x+y) ⋅ (¬x) b) ¬x⋅ ¬(y + ¬z) c) (x+y+z) ⋅ (¬x ⋅ ¬y ⋅ ¬z)

Esercizio Usando i teoremi fondamentali dell’algebra booleana, si semplifichi la seguente funzione in termini di operatori and, or e not F = ((x+y)·(x+z)) + (x+y)·z Scrivere la tavola di verità della funzione ridotta e disegnare il circuito corrispondente

Soluzione

Soluzione

Esercizio Stampare le tabelle booleane relative agli operatori and, or e not

Tabella dell’and int x,y; printf("TABELLA BOOLEANA DELL'AND\n\n"); printf("x \t y \t x and y\n\n"); x = 0; y = 0; printf("%d \t %d \t %d\n",x, y, x &&y); y = 1; x = 1;

Esercizio Usando i teoremi fondamentali dell'algebra booleana, si semplifichi la seguente funzione in termini di operatori and, or e not. f = x and (not y) and z or x and (not y) and (not z) Si scriva, la tavola di verità della funzione ridotta e se ne disegni il circuito corrispondente.

Soluzione

Soluzione

Esercizio Dire, motivando brevemente la risposta, se valgono le seguenti equivalenze: 1. x ⋅ y = ¬ ( ¬x + ¬ y) 2. x + (y ⋅ z) = (x + y) ⋅ (x ⋅ z) 3. (x ⋅ z) ⋅ (x + y ) = x ⋅ z + x ⋅ z ⋅ y N.B: ¬ = not, + = or, ⋅ = and

Esercizio 1 x ⋅ y = ¬ ( ¬x + ¬ y) SI : de Morgan

Esercizio 2 x + (y ⋅ z) = (x + y) ⋅ (x ⋅ z) NO Controesempio : Se x=1, y=1, z=0, allora x + (y ⋅ z) vale 1 (x + y) ⋅ (x ⋅ z) vale 0

Esercizio 3. (x ⋅ z) ⋅ (x + y) = x ⋅ z + x ⋅ z ⋅ y SI (x ⋅ z) ⋅ (x + y) = x ⋅ z ⋅ x + x ⋅ z ⋅ y distributiva x ⋅ z + x ⋅ z ⋅ y commutativa + idempotenza

Esercizio Quale delle seguenti espressioni è sempre falsa: 1. !((!X||Y||!Z) && (X||!Y||Z)) 2. ((X && Y) || (!X && !Y)) && ((!X && Y) || (X && !Y)) 3. (!(X||(Y && !Z))) && (Y||!Z) Y vale 0 X vale 1 Z vale 1 !((!1||0||!1) && (X||!Y||Z)) !((0||0||0) && (X||!Y||Z)) !((0) && (X||!Y||Z)) !((0)) 1

Esercizio Usando i teoremi fondamentali dell’algebra booleana, si semplifichi la seguente funzione in termini di operatori and, or e not F = ¬B⋅(¬A + ¬C) + ¬A⋅(B+¬C)+ ¬C⋅B Scrivere, la tavola di verità della funzione ridotta e disegnare il circuito corrispondente.

Soluzione