| prof. Nunzio Brugaletta |
C++:
programmazione e oggetti |
Il costrutto if permette di codificare una struttura di selezione. La sintassi dell'istruzione if è:
if(espressione) istruzione
dove la valutazione di espressione controlla l'esecuzione di istruzione: se espressione è vera viene eseguita istruzione.
A titolo di esempio viene proposto un programma che richiede un numero all'utente e, se tale numero è minore di 100, visualizza un messaggio. Data la semplicità ne viene proposta direttamente la codifica.
#include <iostream>
using namespace std;
const int limite=100; /*1*/
int main()
{
int i;
// valore da elaborare
cout << “Introdurre un valore intero “;
cin >> i;
// verifica valore
if (i<limite) /*2*/
cout << "numero introdotto minore di " << limite << endl; /*3*/
return 0;
}
Il programma proposto utilizza la costante 100 che potrebbe essere utilizzata direttamente nelle istruzioni che la coinvolgono, ma è più conveniente assegnare ad essa un nome simbolico da utilizzare al posto del valore. L'istruzione contenuta nella 1 dichiara una costante di tipo int con nome limite e valore 100. Nelle istruzioni presenti nel programma, quando viene coinvolta la costante, viene utilizzato il nome, così come evidenziato nelle istruzioni contenute nelle righe 2 e 3.
La differenza fra la dichiarazione di variabile e la dichiarazione di una costante, dal punto di vista della sintassi del linguaggio, prevede la presenza, nel secondo caso, della parola chiave const e dell'assegnazione di un valore. Dal punto di vista dell'esecuzione una variabile, dichiarata come costante, non può essere modificata: se nel programma è presente qualche istruzione che comporta la modifica, per esempio nel caso proposto, di limite, il compilatore genera un messaggio di errore.
Il motivo dell'uso delle dichiarazioni di costanti risiede nel fatto che, in questo modo, all'interno del programma, compare solo il nome simbolico. Il valore compare una sola volta all'inizio del programma stesso e, quindi, se c'è necessità di modificare tale valore, per esempio, valutando se l'input dell'utente non superi 150, qualsiasi sia la lunghezza del programma e quanti che siano gli utilizzi della costante, basta modificare l'unica linea della dichiarazione e ricompilare il programma affinché questo funzioni con le nuove impostazioni.
L' espressione i<limite presente in 2 è la condizione logica che controlla l'istruzione di stampa e pertanto la sua valutazione potrà restituire soltanto uno dei due valori booleani vero o falso che in C++ corrispondono rispettivamente ai valori interi uno e zero. È appunto per tale ragione che un assegnamento del tipo a=i<limite, è del tutto lecito. Viene infatti valutata l'espressione logica i<limite, che restituisce 1 (vero) se i è minore di 100 e 0 (falso) se i è maggiore o uguale a 100: il risultato è dunque un numero intero che viene assegnato alla variabile a.
Chiedersi se il valore di a è diverso da zero è lo stesso che chiedersi, per quanto osservato prima, se il valore di a è vero, il che, in C++, corrisponde al controllo eseguito per default (effettuato in mancanza di differenti indicazioni), per cui si sarebbe anche potuto scrivere
... cin >> i; a = i<limite; if (a) cout << "numero introdotto minore di " << limite << endl;
La sintassi completa dell'istruzione if è la seguente:
if(espressione) istruzione1 [else istruzione2]
dove la valutazione di espressione controlla l'esecuzione di istruzione1 e istruzione2: se espressione è vera viene eseguita istruzione1, se è falsa viene eseguita istruzione2.
Nell'esempio riportato precedentemente è stato omesso il ramo else: il fatto è del tutto legittimo in quanto esso è opzionale. Le parentesi quadre presenti nella forma sintattica completa hanno questo significato.
La tabella seguente mostra gli operatori utilizzabili nell'istruzione if :
|
Operatore |
Esempio |
Risultato |
|---|---|---|
|
! |
!a |
(NOT logico) 1 se a è 0, altrimenti 0 |
|
< |
a < b |
1 se a<b, altrimenti 0 |
|
<= |
a <= b |
1 se a<=b, altrimenti 0 |
|
> |
a > b |
1 se a>b, altrimenti 0 |
|
>= |
a >= b |
1 se a>=b, altrimenti 0 |
|
== |
a == b |
1 se a è uguale a b, altrimenti 0 |
|
!= |
a != b |
1 se a non è uguale a b, altrimenti 0 |
|
&& |
a && b |
(AND logico) 1 se a e b sono veri, altrimenti 0 |
|
|| |
a || b |
(OR logico) 1 se a è vero, (b non è valutato), 1 se b è vero, altrimenti 0 |
È opportuno notare che, nel linguaggio C++, il confronto dell’eguaglianza fra i valori di due variabili viene effettuato utilizzando il doppio segno ==.
|
Esempio A |
Esempio B |
|---|---|
if (a==b) cout << "Sono uguali"; |
If (a=b) cout << "Valore non zero"; |
Nell'esempio A si confronta il contenuto della variabile a ed il contenuto della variabile b: se sono uguali viene stampata la frase specificata.
Nell'esempio B si assegna ad a il valore attualmente contenuto in b e si verifica se è diverso da zero: in tal caso viene stampata la frase specificata.
Una ulteriore osservazione va fatta a proposito degli operatori logici && (AND logico) e || (OR logico) che vengono usati per mettere assieme più condizioni. Es.
if (a>5 && a<10) cout << “a compreso fra 5 e 10”; |
if (a<2 || a>10) cout << “a può essere <2 oppure >10”; |
| http://ennebi.solira.org |
ennebi@solira.org |