Sei sulla pagina 1di 6

Operatori booleani

Introduzione
Obiettivo di questa dispensa la comprensione degli operatori booleani e lacquisizione di abilit che ne consentano un corretto uso allinterno di un programma.

Proposizioni e connettivi logici


Nel lavoro di programmazione capita spesso di dover ricorrere ai principi della logica degli enunciati ed occorre conoscere almeno alcuni concetti base dellalgebra delle proposizioni. Lalgebra delle proposizioni detta anche algebra booleana dal nome del matematico inglese George Boole (1815-1864). Gli oggetti dellalgebra di Boole sono le proposizioni e gli enunciati. Una proposizione una frase autonoma e di senso compiuto formata almeno da un soggetto e da un predicato. Un enunciato una proposizione che pu essere soltanto vera o falsa (ma non contemporaneamente vera e falsa). Per indicare gli enunciati useremo le lettere p, q , r La verit o la falsit di un enunciato sono detti valori di verit. Esempi Oggi piove, Quel fiore rosso sono enunciati perch sempre possibile stabilirne il valore di verit. Speriamo che non piova non un enunciato perch non n vero n falso. Alcuni enunciati possono essere composti, cio formati da sottoenunciati collegati tra loro da connettivi. Esempio Carlo intelligente oppure Carlo studia tutta la notte un enunciato composto dai sottoenunciati Carlo intelligente e Carlo studia tutta la notte collegati tra loro dal connettivo oppure. La propriet fondamentale di un enunciato composto che il suo valore di verit interamente definito dai valori di verit dei suoi sottoenunciati e dal connettivo che li unisce.

Congiunzione AND
Due enunciati p e q possono essere collegati dal connettivo AND. Definizione: Lenunciato composto p AND q vero se e solo se sia p che q sono veri. In ogni altro caso falso. Il valore di verit di p AND q pu essere rappresentato anche in forma tabellare.

p V V F F
Bocchi Cinzia Ultimo aggiornamento: 05/10/2012

q p AND q V V F F V F F F
1

Disgiunzione OR
Due enunciati p e q possono essere collegati dal connettivo OR. Definizione: Lenunciato composto p OR q falso se e solo se sia p che q sono falsi. In ogni altro caso vero. Il valore di verit di p OR q pu essere rappresentato anche in forma tabellare.

p V V F F
Negazione NOT

q p OR q V V F V V V F F

Dato un enunciato p possibile formare un altro enunciato NOT p che detto negazione di p. Definizione: Lenunciato composto NOT p vero se e solo p falso e viceversa. Il valore di verit di NOT p pu essere rappresentato anche in forma tabellare.

p NOT p V F F V
Tavole di verit
Combinando in vario modo gli enunciati semplici p, q, r e i connettivi logici si possono ottenere enunciati composti sempre pi complessi. Per determinare i valori di verit di tali enunciati si utilizzano le tavole di verit. Chiariamo il concetto con un esempio. Prima, per, necessario comprendere che anche gli operatori booleani, cos come gli operatori aritmetici, seguono delle regole di precedenza durante il calcolo di espressioni complesse. In particolare: NOT ha la massima precedenza, AND segue NOT nella scala di precedenza e infine OR ha precedenza minima. Esempio Supponiamo di voler determinare il valore di verit dellenunciato composto NOT(p AND q) Creiamo la seguente tabella:

p V V F F

q p AND q NOT(p AND q) V V F F F V V F V F F V


2

Bocchi Cinzia Ultimo aggiornamento: 05/10/2012

e calcoliamo i valori di verit in base alle regole precedentemente studiate. Osservazione importante Per sapere quante righe ha una tavola di verit, dovete calcolare 2 n dove n il numero di enunciati semplici. Per esempio, nel caso precedente il numero di enunciati semplici 2 (p e q) e quindi le righe della tavola sono 2 2=4.

Operatori booleani in Java


simbolo && || ! nome AND OR NOT

Impiego degli operatori booleani


Gli operatori booleani possono essere impiegati nella costruzione di condizioni sia in caso di scelte (IF) che nei cicli, che vedremo pi avanti. In generale, tali operatori non sono indispensabili ma, se usati correttamente, consentono di semplificare la rappresentazione dellalgoritmo mediante diagramma di flusso. Vediamo alcuni esempi. Esempio 1 Consideriamo il seguente frammento di un diagramma di flusso.
F cond izio ne1 V

F co nd iz ion e2

istruzio ne1

istruzio ne2

La codifica Java :
if(condizione1) { if(condizione2) { istruzione1; istruzione2; } }

Le due istruzioni istruzione1 e istruzione2 vengono eseguite se e solo se sono vere entrambe le condizioni condizione1 e condizione2, cio se e solo se

3
Bocchi Cinzia Ultimo aggiornamento: 05/10/2012

un enunciato vero.

condizione1 AND condizione2

Possiamo allora applicare tale considerazione al diagramma di flusso precedente, ottenendo una significativa semplificazione.

con diz ion e1 AND co nd izione2

istru zion e1

istru zion e2

La codifica Java :

if(condizione1 && condizione2) { istruzione1; istruzione2; }

Esempio 2 Consideriamo il seguente frammento di un diagramma di flusso e supponiamo che le due condizioni condizione1 e condizione2 non possano mai essere entrambe verificate contemporaneamente.

F condizione1

istruzione1

F condizione2

istruzione1

4
Bocchi Cinzia Ultimo aggiornamento: 05/10/2012

La codifica Java :

if(condizione1) { istruzione1; } if(condizione2) { istruzione1; }

Listruzione istruzione1 viene eseguita se vera la condizione condizione1 (essendo condizione2 falsa) oppure se vera la condizione condizione2 (essendo condizione1 falsa). Lunico caso in cui non viene eseguita quando ambedue le condizioni sono false, cio quando condizione1 OR condizione2 un enunciato falso. Il caso in cui le due condizioni sono vere contemporaneamente stato escluso perch altrimenti occorrerebbe eseguire listruzione istruzione1 due volte. Applicando tale considerazione al diagramma di flusso precedente, otteniamo:

co nd izion e1 OR co nd izion e2

istru zio n e1

La codifica Java :

if(condizione1 || condizione2) { istruzione1; }

Esempio 3 Consideriamo il seguente frammento di un diagramma di flusso.

F condizione

istruzione2

istruzione1

5
Bocchi Cinzia Ultimo aggiornamento: 05/10/2012

La codifica Java :
if(condizione) { istruzione1; } else { istruzione2; }

Se la condizione vera viene eseguita istruzione1, altrimenti istruzione2. Un diagramma equivalente pu essere ottenuto negando la condizione e invertendo la posizione delle etichette dei rami uscenti dal rombo.

NOT condizione

istruzione2

istruzione1

La codifica Java :

if(!condizione) { istruzione2; } else { istruzione1; }

Approfondimenti
http://it.wikipedia.org/wiki/Algebra_di_Boole

Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

6
Bocchi Cinzia Ultimo aggiornamento: 05/10/2012