libri-javascript-python

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

2- Variabili in C++

3- Operatori di assegnazione in C++

4- Esempi in C++

5- Casting in C++

Successione di Fibonacci in C++