Il costrutto di selezione

Per alcuni semplici programmi sembrerebbe che tutto si risolva con l'elencazione di una serie di comandi, di cui in parte la sintassi è stata già trattata, posti uno dietro l'altro e da eseguire per il computer in stretto ordine sequenziale. Sicché, dichiarazioni di variabili a parte, il calcolo dell'area di un triangolo si traduce in:

{	printf("    Base del triangolo: "); scanf("%f", &base);
	printf("Altezza del triangolo: "); scanf("%f", &altezza);
	area = base*altezza/2;
	printf("Area del triangolo : %8.3f", area);
}

Queste istruzioni, tra le parentesi { e }, poste in questo modo, rappresentano un esempio chiarissimo di costrutto sequenziale (sono da eseguire in sequenza, una dietro l'altra). Il fatto che siano racchiuse tra le parentesi graffe, come già visto, le fa diventare un tutt'uno che abbiamo definito comando composto.

Nota: un comando composto non è altro che una serie di soli comandi semplici, o di comandi semplici e comandi composti o, ancora, di soli comandi composti, che racchiusi tra parentesi graffe possono essere considerati a loro volta un unico comando composto.

Purtroppo non tutti i problemi (anzi, non succede quasi mai) possono essere risolti con un costrutto sequenziale: spesso si deve ricorrere a costrutti più complessi. A volte viene richiesto all'esecutore un comportamento diverso a seconda del valore assunto da alcuni parametri del sistema in un certo istante.

Ogniqualvolta si deve proporre all'esecutore una scelta da due diversi comportamenti si deve ricorrere ad una struttura, detta struttura di selezione, che indichi senza ambiguità come procedere. In altre parole occorre sottoporre all'esecutore una condizione da controllare e le azioni da eseguire quando la condizione risulta vera e le azioni da eseguire se invece la condizione risulta falsa.

Un modello di questa struttura potrebbe essere il seguente:

se condizione
	{ 	elenco di istruzioni
		da eseguire se la condizione 
		risulta vera
	}
	altrimenti
	{ 	elenco di istruzioni
		da eseguire se la condizione 
		non risulta vera
	}

Facciamo subito un esempio semplice: costruiamo un programma che sia in grado di visualizzare un messaggio che indichi se un numero inserito da tastiera è pari o dispari. Premesso che per controllare se un numero è pari si può dividerlo per 2 e controllare il resto (se è 0 il numero è pari, altrimenti è 1 e il numero è dispari), il programma potrebbe essere questo:

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{	int num;
      
      	printf("Numero da controllare: "); scanf("%d",&num);

      	if (num % 2 == 0) 
      	{  	printf("Numero pari\n"); }
      	else
      	{  	printf("Numero dispari\n"); }
      
     	system("PAUSE");
      	return 0;
}

Il costrutto if ... else.... è, in linguaggio C, la struttura di selezione. Nell'esempio la condizione controllata è

num % 2 == 0

Basta controllare le tabelle degli operatori per capire che vuol dire:
modulo (resto di divisione fra interi) tra num e 2 uguale a zero (?).

Ovviamente questo predicato può essere vero o falso. Laddove risulti vero viene eseguita il primo comando

printf("Numero pari\n");

altrimenti viene eseguito il comando dopo l'else

printf("Numero dispari\n"); 

Ricordiamo che in C vero si indica con valori diversi da 0 e falso con 0. Osserviamo anche che l'espressione num % 2 == 0 quando è vera , e quindi num % 2 è uguale a 0 (il numero è pari), produce un risultato pari a 1, mentre quando è falsa, e quindi num % 2 è uguale a 1, produce un risultato pari 0 (e quindi il numero è dispari).

É quindi possibile utilizzare direttamente il risultato di num % 2 per la nostra condizione, senza confrontarlo con 0, scambiando le azioni sui due rami dell'if, e scrivere:

if (num % 2) 
{  	printf("Numero dispari\n"); }
else
{  	printf("Numero pari\n"); }

A volte l'alternativa si pone non tra due azioni alternative ma tra il fare e non fare un'azione. In questo caso il modello della struttura divine:

se condizione
	{ 	elenco di istruzioni
		da eseguire se la condizione 
		risulta vera
	}

senza nessuna azione da compiere quando la condizione è falsa.

Supponiamo, ad esempio, sapendo la diaria giornaliera (non superiore a 100 €) e il numero di giorni lavorativi in un mese, di voler stabilire se il totale dei compensi mensili superi i 1000€. Il programma potrebbe essere questo:

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{	int diaria, giorni, totale;

      	printf("Compenso giornaliero : "); scanf("%d",&diaria);      
      	printf("Numero di giorni lavorativi nel mese : "); scanf("%d",&giorni);
	
	totale = diaria * giorni;
      	
	if (totale > 1000) 
      	{  	
		printf("Il totale dei compensi supera i 1000 €i\n"); 
	}
      
     	system("PAUSE");
      	return 0;
}

Il programma potrebbe concludersi senza output. Seppure questo è altamente sconsigliabile, per il momento ci accontenteremo della sua funzione esplicativa di un costrutto di selezione senza azione quando la condizione non è verificata.

Scrivi email per il tutor dei corsi
Scrivi email per l'amministratore del sito
Torna all'indice del modulo

Ultima modifica: