A volte, per eseguire dei blocchi o un’operazione è necessario che più condizioni siano verificate.
Si potrebbero usare diversi if, ma la questione si allungherebbe di molto.
Prendiamo per esempio, un problema che recita: scrivere un programma in C++, che sommi 100 ad un numero inserito dall’utente, solo se il numero inserito è uguale a 2, 3, 4, 13 e 27, e che stampi il numero finale.
Questo è il problema senza gli operatori logici:
#include <iostream>
using namespace std;
int main() {
int num;
cout<<"Inserisci un numero: ";
cin>>num;
if (num==2) {
num+=100;
} else if (num==3) {
num+=100;
} else if (num==4) {
num+=100;
} else if (num==13) {
num+=100;
} else if (num==27) {
num+=100;
}
cout<<"Nuovo numero: "<<num;
return 0;
}
Come vedete, la condizione è molto lunga, e per scriverla occorre molto tempo.
Qui entrano in gioco gli operatori logoci: && (and), || (or) e ! (not).
L’operatore not l’ho già accennato nella lezione precedente, quando ho spiegato i trucchi per le condizioni.
Praticamente, il not nega il valore di una variabile. Se il valore di una variabile è diverso da 1, esso diventerà 0. Viceversa, se il valore di una variabile è 0, negandolo, esso diventerà 1 (Ma non diventerà maggiore o minore di uno!).
Per realizzare questa operazione, serve però scrivere il risultato in un’altra variabile.
L’operatore and significa letteralmente “e”, mentre l’operatore or significa letteralmente “o” (“oppure”).
Quindi, ritornando al problema di prima, la nuova versione, utilizzando l’or sarà la seguente:
#include <iostream>
using namespace std;
int main() {
int num;
cout<<"Inserisci un numero: ";
cin>>num;
if (num==2 || num==3 || num==4 || num==13 || num==27) {
num+=100;
}
cout<<"Nuovo numero: "<<num;
return 0;
}
Attenzione: verifica sempre bene quale operatore logico utilizzare. Spesso potresti sbagliare, utilizzando l’and invece che l’or o viceversa. Non sono la stessa cosa!
Nel C++, non si può abbreviare una condizione che necessita di operatori logici. Ad esempio, prendendo l’esercizio precedente, non posso scrivere if (num==2, 3, 4, 13, 27) o if (num==2, ==3, ==4, ==13, ==27) ecc…
Un’altro esempio potrebbe essere quello di verificare se un numero è >= a 0 o <= a 10.
La condizione non può essere if (0 <= num <= 10), ma deve essere if ((num>=0) && (num<=10)).
Non posso neanche controllare più di 2 variabili senza gli operatori logici, ad esempio non posso controllare se tre variabili hanno lo stesso valore in questo modo: if (a==b==c).
Devo scrivere if ((a==b) && (b==c)).