Esempi con gli operatori logici in C++

Esempi con gli operatori logici in C++

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

Esempio con gli operatori logici in C++

Esempio con gli operatori logici in C++

Analizziamo un esempio con gli operatori logici in C++, al fine di comprendere meglio il funzionamento di detti operatori. Nel precedente tutorial ne abbiamo dato la definizione e visto l’ordine di precedenza.

Riprendiamo innanzitutto un esercizio che abbiamo già realizzato in questo tutorial:
https://www.codingcreativo.it/esercizio-con-if-else-in-c/
.

Riportiamo dunque il testo:

Su una linea ferroviaria, rispetto alla tariffa piena, i pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e infine i disoccupati del 25%.
Quindi, codificando i pensionati con una P, gli studenti con una S e i disoccupati con una D, scrivere un programma che, rischiesto il costo di un biglietto e l’eventuale condizione dell’utente, visualizzi l’importo da pagare.

Modifichiamo l’esercizio in modo tale che, sia inserendo le lettere minuscole sia le maiuscole, il programma funzioni ugualmente.

Basterà allora trasformare gli if in questo modo:

if (categoria==’P’ || categoria==’p’ )

Cioè se categoria=’P’ oppure categoria=’p’.

E così tutti gli altri.

Il resto del programma rimane chiaramente invariato.

Allego il listato completo dell’esempio con gli operatori logici in C++.

#include<iostream>
using namespace std;

main(){	
	char categoria;
	float costo;
	
	cout<<"Inserisci la categoria:\ncategoria P = pensionati, S = studenti, D = disoccupati):\t ";
	cin>>categoria ;
	cout<<"prezzo biglietto:\t ";
	cin>>costo;
	
	if (categoria=='P' || categoria=='p' )
		costo *= 0.9;
	else if (categoria=='S' || categoria=='s')
		costo *= 0.85;
	else if (categoria=='D' || categoria=='d')
		costo *= 0.75;
	else
		cout<<"la categoria inserita non ha sconti\n"<<endl;
	
	cout<<"Pagherai: \t"<<costo<<endl;
	return 0;
}

Chiaramente questo è solo un semplice esempio con gli operatori logici in C++. Nel prossimo tutorial proporrò degli altri esempi in modo da esercitarci ulteriormente.

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

Alcuni tutorial in C

Somma elementi diagonale principale di una matrice

Sommare elementi della cornice esterna di una matrice in C

Somma di due matrici in C

Sommare dei numeri di una matrice in C

Prodotto tra matrici in C

Come ricercare gli elementi in una matrice in C

Inserire dati in una matrice in C

Tavola pitagorica in C

Operatori logici in C++

Operatori logici in C++

Gli operatori logici in C++ consentono di concatenare tra di loro più espressioni logiche o anche di negare il risultato di un’espressione.

Ma vediamo in dettaglio quali sono gli operatori logici in C++:

! (not logico)

&& (and logico)

|| (or logico)


Esempi d’uso degli operatori logici in C++

Operatore not

Il connettivo not ( ! ), come abbiamo già detto, nega un’espressione.

Ad esempio l’espressione:

! a

restituisce vero se a è falsa e viceversa.

L’operatore ! è di tipo unario.


Operatore &&

L’operatore and ( && ) restituisce vero se e solo entrambe le operazioni logiche sono vere.

Ad esempio:

a==5 && b==7

Restituisce vero solo se a è uguale a 5 e b è uguale a 7, in tutti gli altri casi restituisce falso.

L’opertore && è un operatore binario.

Operatore ||

L’operatore or (||) restituisce vero se almeno una delle due espressioni è vera.

Ad esempio:

a==5 || b==7

E verà sia se le espressioni sono vere entrambe, sia se almeno una delle due è vera. Quindi è falsa solo se entrambe sono false.

L’opertore || è un operatore binario.

Ordine di priorità

L’ordine di priorità è il seguente: prima il not (!) poi l’and (&&) e infine l’or (||).

Quindi se vogliamo un ordine diverso occorre utilizzare le parentesi.

Ad esempio:

a==5 || b==7 && c==6

Prima verranno valutate le operazioni logiche b==7 e c==6.

Invece, con le parentesi:

(a==5 || b==7) && c==6

In questo caso verranno valutate prima le operazioni logiche a==5 || b==7.


Inoltre la valutazione delle espressioni và, come nel C, da sinistra verso destra.

Facciamo degli esempi sulla valutazione degli operatori logici in C++, per capire meglio il concetto.


Esempi

if (a>10 || b!=9) ….

In questo caso l’espressione b diverso da 9 verrà valutata solo se l’espressione a>10 è falsa.

if (a>10 && b!=9) ….

In questo caso l’espressione b diverso da 9 verrà valutata solo se l’espressione a>10 è vera.

Nella prossima lezione vedremo qualche esempio di utilizzo degli operatori logici in C++.

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



Esercizi con switch case in C++

Esercizi con switch case in C++

Proponiamo degli esercizi con l’istruzione switch case in C++, al fine di assimilare bene il funzionamento di questo costrutto.

Ricordiamo che il costrutto switch consente una selezione a più vie, cioè una selezione multipla.

Esercizio 1 con switch case in C++

Uno degli esercizi con switch case in C++ che vi voglio proporre è quello già spiegato in questo tutorial:

https://www.codingcreativo.it/esercizio-con-if-else-in-c/

ma affrontato utilizzando gli if…else.

Svolgiamolo adesso utilizzando l’istruzione switch case.

Dunque riportiamo il testo dell’esercizio per comodità.

Su una linea ferroviaria, rispetto alla tariffa piena, i pensionati usufruiscono di uno sconto del 10%, gli studenti del 15% e infine i disoccupati del 25%.
Allora, codificando i pensionati con una P, gli studenti con una S e i disoccupati con una D, scrivere un programma che, richiesto il costo di un biglietto e l’eventuale condizione dell’utente, visualizzi l’importo da pagare.

Innanzitutto dichiaro due variabili, una di tipo char per la categoria e una di tipo float che contiene il prezzo del biglietto.

Dopo valuto categoria, se è uguale a P, eseguo quello che c’è dopo i due punti, altrimenti valuto se categoria è uguale ad S, e così via.

N.B. Ho scritto la notazione abbreviata costo*=0.9.

Potevamo anche utilizzare costo-=costo*0.1;

O in forma più ‘rudimentale’ costo=costo-costo*0.1.

Allego quindi il listato completo dell’esercizio sviluppato con switch case in C++.

#include<iostream>
using namespace std;

int main(){	
	char categoria;
	float costo;
	
	cout<<"Inserisci la categoria:\ncategoria P = pensionati, S = studenti, D = disoccupati):\t ";
	cin>>categoria ;
	cout<<"prezzo biglietto:\t ";
	cin>>costo;
	
	switch (categoria) {
		case 'P': costo*=0.9;
		break;
		case 'S': costo*=0.85;
		break;
		case 'D': costo*=0.75;
		break;
		default: cout <<"paghi il prezzo intero"<<endl;	
	}
	
	cout<< "Pagherai : \t"<<costo<<endl;
	return 0;
}

Esercizio 2

Il secondo degli esercizi con switch case in C++ che voglio proporvi è molto semplice.

Realizzare un programma, utilizzando lo switch case, che legga in input un voto rappresentato da un carattere tra A ed E e ne stampi il significato.

Ad esempio:

A significa ottimo;

B significa distinto;

C significa discreto;

D significa sufficiente;

E significa insufficiente.

Ecco quindi il listato completo dell’esercizio proposto.

#include <iostream>
using namespace std;

int main () { 
	char voto;
	string significato;
	cout <<"Qual e' il voto (A, B, C, D o E)?"<<endl;
	cin >> voto;
	int errore=0;

	switch (voto) {
		case 'A': significato="ottimo";
		break;
		case 'B': significato="distinto";
		break;
		case 'C': significato="discreto";
		break;
		case 'D': significato="sufficiente";
		break;
		case 'E': significato="insufficiente";
		break;
		default: cout<<"Errore! Voto sbagliato! Rifare!"<<endl;
		errore=1;
	}
	if (errore==0)
	     cout<<"Il voto '"<<voto<<"' significa \t"<<significato<<"."<<endl;
	return 0;
	}

Chiaramente questi sono solo dei semplicissimi esercizi con switch case in C++.

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



Switch case in C++

Switch case in C++

In quest’articolo parleremo dello switch case in C++.

Il costrutto switch consente di realizzare una selezione a più vie, cioè una selezione multipla.

La struttura sintattica è questa:

switch (espressione) {

case <valore1>: 

istruzioni1;

break;

case <valore2>: 

istruzioni2;

break;

….

default

istruzioni;

}

In fase di esecuzione si valuta espressione e viene confrontata con valore1. Se i due valori sono uguali allora si esegue il codice specificato dopo i due punti corrispondenti. La parola chiave break causa l’uscita immediata dallo switch, quindi il controllo viene trasferito alla fine del blocco, cioè alla prima istruzione che segue lo switch.

Se espressione non è uguale a valore1 allora si confronta espressione con valore2. Di conseguenza, se sono uguali si esegue il codice specificato dopo i due punti e dopo si uscirà dallo switch con l’istruzione break.

E così via.

Nel caso in cui nessuna delle condizioni è verificata si esegue ciò che è indicato nella parola riservata default.


Esempio di switch case in C++

Facciamo un semplice esempio: realizziamo una calcolatrice usando lo switch case in C++.

Quindi verrà utilizzata una variabile di tipo char operatore, la quale verrà confrontata di volta in volta con il simbolo immesso (+, -, * o /). Se nessuno dei valori è uguale alla variabile operatore allora si avrà in output il messaggio “undefined”.

Controlliamo inoltre se il secondo operando è uguale a zero, perchè ricordiamo non è possibile dividere un numero per zero.

#include <iostream>
using namespace std;

int main (){
	float a, b, ris;
	char operatore;

	cout<<"Qual e' il primo operando?"<<endl;
	cin>>a;
	cout<<"Qual e' l'operatore(+, -, * o /)?"<<endl;
	cin>>operatore;
	cout<<"Qual e' il secondo operando?"<<endl;
	cin>>b;

	switch (operatore) {
		case '+': ris=a+b;
		break;
		case '-': ris=a-b;
		break;
		case '*': ris=a*b;
		break;
		case '/': if (b!=0)
				ris=a/b;
			   else 
				cout <<"Non si puo' dividere per zero!";
		break;
		default: cout <<"Il carattere non e' riconosciuto";
	}
	cout<<a<<operatore<<b<<"="<<ris;
	return 0;
}

Potevamo anche creare una variabile che quando si verifica una condizione undefined esca. Ad esempio inizializziamo errore=0 e poi aggiungiamo:

case '/': if (b!=0)
		 ris=a/b;
	  else { cout<<"Non si puo' dividere per zero!"<<endl;
                 errore=1;} 

E anche qui:

default: cout<<"undefined"<<endl;
         errore=1;

E infine:

if(errore==0)
	cout<<a<<operatore<<b<<"="<<ris<<endl;

Facciamo un altro esempio di switch case in C++.


Esempio 2

Realizziamo un semplicissimo programma che preso in input un numero intero compreso tra 1 e 12, restituisca il mese per esteso.

Ad esempio se inserisco 1, il programma mi restituirà Gennaio.

Allego il listato completo che potete provare.

#include <iostream>
using namespace std;
 
int main()
{
    int numero;
    cout<<"Inserisci un numero che va da 1 a 12. Ti diro' il mese corrispondente." <<endl;
    cin>>numero;
    switch(numero) {
    case 1:
        cout<<"Gennaio";
        break;
    case 2:
        cout<<"Febbraio";
        break;
    case 3:
        cout<<"Marzo";
        break;
    case 4:
        cout<<"Aprile";
        break;
    case 5:
        cout<<"Maggio";
        break;
    case 6:
        cout<<"Giugno";
        break;
    case 7:
        cout<<"Luglio";
        break;
    case 8:
        cout<<"Agosto";
        break;
    case 9:
        cout<<"Settembre";
        break;
    case 10:
        cout<<"Ottobre";
        break;
    case 11:
        cout<<"Novembre";
        break;
    case 12:
        cout<<"Dicembre";
        break;
    default:
        cout<<"Il numero inserito non corrisponde a nessun mese";
    }
return 0;
}

Chiaramente questi sono solo alcuni semplici esempi di switch case in C++.

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