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; ``'' è sempre falsa mentre ``
'' è 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 (per true) e
(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 |
//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 |