next up previous contents index
Next: La scelta condizionata Up: Costrutti condizionali e iterativi Previous: Costrutti condizionali e iterativi   Indice   Indice analitico

Gli operatori logici

Prima di presentare gli operatori logici in C++, forniamo qualche cenno di logica, che ci servirà per meglio capire l'utilizzo di essi. La logica è la branca della matematica che si occupa dello studio delle espressioni logiche, o circuiti logici; per i nostri scopi sarà più che sufficiente esplorare il ``capitolo 0'' di tale disciplina. Cominciamo dalla definizione di espressione logica: si tratta, in generale, di una proposizione valutabile univocamente; vediamo qualche esempio:

Ogni espressione logica può essere vera o falsa: negli esempio sopra citati ``piove'' può essere sia vera che falsa a seconda del punto e del momento in cui la adoperiamo; ``$2+2=5$'' è sempre falsa mentre ``$1=1$'' è sempre vera, cioè è una identità. Si noti che non sempre la logica classica, cioè quella oggetto della nostra trattazione e comunemente utilizzata all'interno dei calcolatori, riesce a risolvere delle espressioni, anche apparentemente banali. Consideriamo la proposizione ``io sono bugiardo'' e cerchiamo di valutare se essa è vera o falsa; se fosse vera allora io dovrei mentire e quindi affermare di essere sincero, il che è contraddittorio; se fosse falsa d'altronde non avrei potuto mentire, e anche in questo caso arriviamo ad una contraddizione. Dunque l'espressione ``io sono bugiardo'' è implicitamente non valutabile con i criteri della logica classica 3.1.

Le espressioni logiche possono essere collegate tra di loro utilizzando i cosiddetti operatori logic: AND, OR, NOT, che corrispondono in insiemistica, rispettivamente, a intersezione, unione e complemento. Il loro significato è piuttosto intuitivo ma, proprio per questo, è facile confondersi lasciandosi influenzare dall'uso che tali termini hanno nel linguaggio comune. Riportiamo di seguito le tabelle di verità dei tre operatori e alcuni esempi 3.2:

AND T F
T T F
F F F
OR T F
T T T
F T F
NOT  
T T
F T



Vediamo ora come il C++ implementa tali operatori. Prima di tutto però abbiamo bisogno di un nuovo tipo, che utilizzeremo per la valutazione delle espressioni: il tipo bool, il quale ha la particolarità di avere solo due valori possibili: true e false; si faccia bene attenzione: in uscita le variabili di tipo bool assumono i valori $1$ (per true) e $0$ (per false).


//ex3_1_1.cpp
#include <iostream.h>
void main() {
   bool t = true, f = false;
   cout << "t = " << t << "\tf = "<< f;
}

output
t = 1 f = 0

In C++ gli operatori logici sono i seguenti:

&& AND binario
|| OR binario
! NOT unario
essi accettano due espressioni, o una nel caso nell'opeatore NOT, e restituiscono true o false, applicando le tabelle di verità precendente esposte. In C++ ogni espressione è valutabile come vera o falsa; tale elasticità di linguaggio spesso porta a banali errori, come in alcuni casi vedremo. L'esempio che segue stampa la tabella di verità dell'AND logico.


//ex3_1_2.cpp
#include <iostream.h>
void main() {
   bool t = true, f = false;
   cout << "TRUE=1\tFALSE=0";
   cout << "\nAND\t 1\t 0";
   cout << "\n 1 \t " << (t && t) << "\t " << (t && f);
   cout << "\n 0 \t " << (f && t) << "\t " << (f && f);
}

output:
 TRUE=1 FALSE=0  
 AND 1 0
 1 1 0
 0 0 0

ex-2
si scriva un programma che abbia come output la tabella di verità dell'OR logico
ex-3
si dimostri che
NOT(a) AND NOT(b) = NOT(a OR b)


next up previous contents index
Next: La scelta condizionata Up: Costrutti condizionali e iterativi Previous: Costrutti condizionali e iterativi   Indice   Indice analitico
Claudio Cicconetti
2000-09-06