Istruzioni condizionali (SE ALTRIMENTI, IF ELSE)

Spiegazione

Iniziamo subito con un esempio semplice e molto intuibile:

Condizione iniziale: luce spenta. SE premo l’interruttore, ALLORA accendi la luce, ALTRIMENTI la luce rimane spenta.

Adesso passiamo ad un esempio con un SE (o IF) annidato:

Condizione iniziale: il numero è 50.

SE il numero è minore di 100
   ALLORA
       SE il numero è contemporaneamente maggiore di 30
           ALLORA 
               scrivi "Il numero è intermedio"
           ALTRIMENTI 
               scrivi "Il numero è basso"
       FINE_SE
   ALTRIMENTI
       scrivi "Il numero è alto"
FINE_SE

Secondo questa logica, il numero 50 sarà intermedio. Ho evidenziato i due SE con colori diversi.

I se-altrimenti sono quasi sempre chiamati IF ELSE (letteralmente dall’inglese: se altrimenti).

Adesso capiamo come funzionano nel C++.

Struttura nel C++

Come faccio a creare un’istruzione decisionale in C++?

La struttura è composta da due parole chiave molto comuni: if e else. I blocchi da eseguire devono essere contenuti in parentesi graffe.

if (condizione) {
	esegue se la condizione è vera
}
else {
	esegue se la condizione è falsa
}

Prendiamo per esempio un programma che, dato un numero intero inserito dall’utente, indichi se questo numero è pari o dispari. (Ricorda che per individuare se un numero è pari o dispari bisogna usare l’operatore % (mod – resto della divisione)).

Ecco il programma:

#include <iostream>

using namespace std;

int main() {
	int num, esito;
	
	cout<<"Inserisci un numero: ";
	cin>>num;
	
	esito = num % 2;
	
	if (esito == 0) {
		cout<<"Il numero e' pari";
	}
	else {
		cout<<"Il numero e' dispari";
	}
	
	return 0;
}

Quindi, se esito (resto della divisione tra il numero inserito e 2) è uguale a zero, significa che il numero è pari, altrimenti il numero è dispari.

Invece di utilizzare una variabile esito, per rendere il programma meno pesante, posso utilizzare direttamente l’espressione num%2 come condizione, come riportato qui sotto.

if (num%2 == 0) {
	cout<<"Il numero e' pari";
}
else {
	cout<<"Il numero e' dispari";
}

Nota bene: ricordati che se devi comparare due variabili, oppure una variabile e un valore, per controllare se hanno lo stesso valore, devi usare l’ ==, e non solo l’ =.

Come fare quando si devono verificare più condizioni

In alcuni problemi potresti aver bisogno di confrontare più volte un’espressione o una variabile.

In quel caso, si possono creare degli if annidati.

Prendiamo il primo esempio che ho fatto, quello nella spiegazione, in alto, e traduciamolo in C++:

#include <iostream>

using namespace std;

int main() {
	int num=50;
	
	if (num<100) {
		if (num>30) {
			cout<<"Il numero e' intermedio";
		}
		else {
			cout<<"Il numero e' basso";
		}
	}
	else {
		cout<<"Il numero è alto";
	}
	
	return 0;
}

Puoi capire che senza indentazione, questo if annidato sarebbe abbastanza difficile da leggere e comprendere. Ma anche così non è facilissimo da leggere, quindi esiste un piccolo trucco per ordinare al meglio il tuo programma:

#include <iostream>

using namespace std;

int main() {
	int num=50;
	
	if (num>100) {
		cout<<"Il numero e' alto";
	}
	else if (num>30) {
		cout<<"Il numero e' intermedio";
	}
	else {
		cout<<"Il numero e' basso";
	}
	
	return 0;
}

Invece di scrivere l’else, mettere le parentesi e scrivere un altro if, ho unito le due parole, formando else if. Il compilatore legge immediatamente tutto quello dopo l’else, quindi leggerà un altro if, del quale verificherà la condizione ed eseguirà i blocchi.

Ovviamente, per far funzionare questo tipo di if ho dovuto modificare l’ordine delle condizioni, infatti prima verifico se il numero è maggiore di 100, e poi verifico se il numero è maggiore di 30, in caso ce ne fosse bisogno.

Alcune scorciatoie

1. Quando scrivi un if con la sua condizione senza mettere le parentesi, il compilatore leggerà la riga a seguire. Quindi, se il blocco da eseguire è solo uno, non è necessario mettere le parentesi graffe, e puoi scrivere il blocco nella riga sotto. Ecco un piccolo esempio:

if (num%2==0)
	cout<<"Il numero e' pari";
else
	cout<<"Il numero e' dispari";

In questo caso, l’istruzione da eseguire dopo l’if è solo una (il cout<<), e quindi non necessita di parentesi.


2. Mettendo il not (!) davanti alla condizione, questa verrà intesa come ==0. Quindi posso scrivere, per esempio,

if (num%2==0) oppure if (!(num%2)).

Si raccomanda l’uso delle parentesi tonde.


3. Mettendo come condizione solo una variabile o un’espressione, essa verrà considerata come >=1.

Ad esempio, mettendo come condizione num%2, senza nient’altro, il compilatore controllerà se è maggiore o uguale a 1.

if (num%2)  //OPPURE if (num%2 >= 1)
	cout<<"Il numero e' dispari";
else
	cout<<"Il numero e' pari";

Ora è il momento di fare qualche esercizio!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.