Analizziamo oggi alcuni esempi con gli operatori logici in C++.
Nei precedenti tutorial abbiamo definito cosa sono gli operatori logici e abbiamo realizzato un piccolo esempio.
Facciamo altri esempi con gli operatori logici in C++.
Primo esempio
Preso un numero in input controllare se è interno all’intervallo [10,20].
Basta controllare se il numero è maggiore o uguale a 10 e minore o uguale a 20 per dire che è interno all’intervallo.
Quindi utilizzo: if(numero >= 10 && numero <= 20)
Allego il listato completo dell’esempio.
#include <iostream>
using namespace std;
int main() {
int numero;
const int a = 10;
const int b = 20;
cout << "Inserisci un numero: ";
cin >> numero;
if (numero >= a && numero <= b) {
cout << "Il numero è interno";
} else {
cout << "Il numero è esterno";
}
return 0;
}
Secondo esempio
Inserire un carattere e dire se è numerico oppure è una lettera dell’alfabeto oppure un’altra cifra qualunque.
if (c >= ‘0’ && c <= ‘9’)
con questa istruzione si vede se il carattere è numerico
if (c >= ‘a’ && c <= ‘z’)
con questa istruzione si vede se il carattere è una lettera minuscola
if (c >= ‘A’ && c <= ‘Z’)
infine, con questa istruzione si vede se il carattere è una lettera maiuscola.
Ecco dunque il listato completo.
#include <iostream>
using namespace std;
int main() {
char c;
cout << "Inserisci un carattere: ";
cin >> c;
if (c >= '0' && c <= '9') {
cout << "Cifra numerica";
} else if (c >= 'a' && c <= 'z') {
cout << "Carattere dell'alfabeto minuscolo";
} else if (c >= 'A' && c <= 'Z') {
cout << "Carattere dell'alfabeto maiuscolo";
} else {
cout << "Altro carattere";
}
return 0;
}
Terzo esempio
Inserire un carattere in input, se tale carattere è numerico o una lettera dell’alfabeto visualizzare ‘carattere valido’, altrimenti visualizzare ‘carattere non valido’.
Quindi questa volta ad esempio posso fare un solo if dove unisco le tre condizioni:
if ((c >= ‘0’ && c <= ‘9’) || (c >= ‘a’ && c <= ‘z’) || (c >= ‘A’ && c <= ‘Z’))
Se una di queste condizioni si verifica allora il carattere è valido, altrimenti non lo è.
#include <iostream>
using namespace std;
int main() {
char c;
cout << "Inserisci un carattere: ";
cin >> c;
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
cout << "Carattere valido";
} else {
cout << "Carattere non valido";
}
return 0;
}
Quarto esempio
Dati in input 3 caratteri, il primo che rappresenta la classe, il secondo che rappresenta la sezione e il terzo che rappresenta l’indirizzo, dire se la sequenza può essere una classe di un determinato istituto scolastico.
Ipotizziamo che l’istituto abbia le classi che vanno dalla prima alla quinta e che le sezioni possono variare dalla A alla E e che gli indirizzi hanno le seguenti lettere: I=Informatica, E=Elettronica, M=Meccanica e C=Chimica.
Quindi alcune combinazioni possibili possosno essere:
3AI, 2BE, 1CC, 5EM, ecc…
Allora potrei fare questo controllo: prendo in input le variabili c, z e i che rappresentano rispettivamente la classe, la sezione e l’indirizzo.
Controllo se questa condizione è verificata:
if ((c>=1 && c<=5) && (z>=’A’ && z<=’E’) && (i==’I’ || i==’E’ || i==’C’ || i==’M’))
Se vera visualizzo ‘è una classe del nostro istituto’; altrimenti se falsa che non lo è.
Oppure potrei usare delle variabili di tipo booleano, dove vado a memorizzare le operazioni logiche:
flagc=(c>=1 && c<=5);
flags=(z>=’A’ && z<=’E’);
flagi=(i==’I’ || i==’E’ || i==’C’ || i==’M’);
E quindi scrivere:
if (flagc && flags && flagi)
Inoltre, guardando la codifica ASCII, per convertire ciascun carattere da minuscolo a maiuscolo basta effettuare questa operazione:
if (z >= ‘a’ && z <= ‘z’)
z -= 32;
Analogamente per l’indirizzo.
Quindi anche se l’utente dovesse inserire da tastiera ad esempio la sequenza di caratteri 2ai, il programma li convertirà in 2AI.
Ecco quindi il listato completo.
#include <iostream>
using namespace std;
int main() {
int c;
char z, i;
bool flagc, flags, flagi;
cout << "Inserisci la classe:\n";
cin >> c;
cout << "Inserisci la sezione:\n";
cin >> z;
cout << "Inserisci l'indirizzo:\n";
cin >> i;
// Trasformo z e i in maiuscolo se sono inseriti in minuscolo
if (z >= 'a' && z <= 'z') {
z -= 32;
}
if (i >= 'a' && i <= 'z') {
i -= 32;
}
flagc = (c >= 1 && c <= 5);
flags = (z >= 'A' && z <= 'E');
flagi = (i == 'I' || i == 'E' || i == 'C' || i == 'M');
if (flagc && flags && flagi) {
cout << c << z << i << " è una classe del nostro istituto";
} else {
cout << "Non può essere una classe del nostro istit
Chiaramente ho proposto possibili soluzioni agli esempi con gli operatori logici in C++. Proponete pure la vostra soluzione.
Alcuni link utili
Indice argomenti linguaggio C++
1- Introduzione al linguaggio C++
3- Operatori di assegnazione in C++
Successione di Fibonacci in C++