Corsi registrati su
C, C++, Python, JavaScript
Corsi in diretta per la formazione di Front End Developer e Back End Developer
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 e' interno";
else
cout<<"il numero e' 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;
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<<" E' una classe del nostro istituto";
else
cout<<"non puo' essere una classe del nostro istituto";
return 0;
}
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++