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)

Banner Pubblicitario

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’)

Banner pubblicitario

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++

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++