i cicli o iterazioni, o ancora loops, che controllano che l'esecuzione di un blocco di codice avvenga sinché si verifica una condizione;
le istruzioni di controllo di alternativa, che controllano che l'esecuzione di un blocco di codice avvenga se si verifica una condizione;
Nei cicli, il codice viene eseguito tante volte quante sono le volte in cui si verifica una determinata condizione (descritta naturalmente da un'espressione relazionale).
Ad esempio, come abbiamo già visto, il ciclo
while(variabile == 100)esegue il codice all'interno del blocco sinché variabile è uguale a 100, il che può avvenire una sola volta così come all'infinito.
{
//codice da eseguire
}
Mentre nelle istruzioni che andremo a vedere il blocco di codice viene eseguito solo una volta, se l'espressione da verificare risulta vero, altrimenti non viene mai eseguito.
Vediamo queste istruzioni nel dettaglio. La prima è l'istruzione if, che significa "se":
if(variabile == 100)Tradotto in pseudocodice risulta qualcosa come:
{
//esegui il codice
}
SE(QUESTA_CONDIZIONE_E'_VERA)Facciamo una prova pratica per capire meglio:
{
//ESEGUI QUESTO CODICE
}
char varChar;Compilate il codice ed eseguite il programma.
cout << "Per favore premi il tasto x" << cout;
cin >> varChar;
if(varChar == 'x')
{
cout << "HAI PREMUTO IL TASTO X";
}
Il programma mostrerà a schermo la scritta "Per favore premi il tasto x", ed attenderà la pressione di un tasto della tastiera;
memorizzerà il tasto premuto nella variabile varChar dopodiché, grazie all'istruzione if, controllerà se questo carattere è uguale al carattere x;
Se lo è, il programma eseguirà l'istruzione all'interno del blocco if, mostrando la scritta "HAI PREMUTO IL TASTO X", mentre se non lo è il programma non eseguirà l'istruzione all'interno del blocco.
E' anche possibile eseguire un altro blocco di codice nel caso l'istruzione non si verifichi.
Questo avviene grazie all'istruzione else, che significa "altrimenti":
char varChar;Il codice esegue il primo blocco se (if) la variabile è uguale a x, altrimenti (else) esegue il secondo blocco.
cout << "Per favore premi il tasto x" << cout;
cin >> varChar;
if(varChar == 'x') //se varChar è uguale a x esegui:
{
cout << "HAI PREMUTO IL TASTO X";
}
else //altrimenti esegui:
{
cout << "HAI PREMUTO UN ALTRO TASTO";
}
In altre parole il blocco che segue else viene eseguito ogni volta che si verifica una condizione diversa da quella specificata nell'if.
E' possibile anche eseguire più controlli, e questo avviene tramite l'istruzione else if:
char varChar;Non è difficile da capire, si tratta di verificare più condizioni una per una, e se nessuna di queste si verifica viene eseguito il codice all'interno del blocco di else;
cout << "Per favore premi il tasto x" << cout;
cin >> varChar;
if(varChar == 'x') //se varChar è uguale a x esegui:
{
cout << "HAI PREMUTO IL TASTO X";
}
else if(varChar == 'y') //se invece varChar è uguale a y esegui:
{
cout << "HAI PREMUTO IL TASTO Y";
}
else if(varChar == 'z') //se invece varChar è uguale a z esegui:
{
cout << "HAI PREMUTO IL TASTO Z";
}
else //se non si verifica nessuna delle condizioni precedenti esegui:
{
cout << "HAI PREMUTO UN ALTRO TASTO";
}
o, nel caso non sia presente l'istruzione else, il programma continua con l'istruzione che segue l'ultimo else if.
Compilate il programma ed eseguitelo.
Vedrete che, se premerete il tasto x, verrà eseguito il blocco all'interno della prima condizione (if);
se premete il tasto y verrà eseguito il blocco della seconda condizione (else if);
se premete il tasto z verrà eseguito il blocco della terza condizione (else if);
se invece premete un tasto che non rientra tra i tre precedenti viene eseguito il codice all'interno dell'ultima condizione (else);
Le istruzioni "if, else if, else" sono fondamentali per verificare delle condizioni e per rendere il nostro programma interattivo e far sì che si comporti in modo diverso in base alle circostanze.
Un altro esempio può essere quello di un programma che esegue la divisione di due numeri inseriti dall'utente: se il dividendo è diverso da zero (ricordate l'operatore di diseguaglianza?) esegue la divisione, altrimenti mostra un errore del tipo "impossibile dividere per zero!".
Potete fare anche l'opposto, e cioé: se (if) il dividendo è uguale a zero mostrate un errore, altrimenti se (else if) il dividendo è un numero decimale mostrate un altro errore, altrimenti (else) eseguite la divisione e mostrate il risultato a schermo.
Cosa aspettate? Provate! E ricordate che sbagliando si impara!
Oltre a if, else if ed else, il C++ offre un secondo metodo particolarmente utile quando dobbiamo verificate una grande quantità di condizioni.
Si tratta dell'istruzione switch, di cui vediamo subito un esempio:
char varChar;In questo esempio abbiamo introdotto cinque nuove istruzioni: switch, case, break, default e i due punti : .
cout << "Per favore premi il tasto x" << cout;
cin >> varChar;
switch(varChar)
{
case 'x' : cout << "hai premuto x";
break;
case 'y' : cout << "hai premuto y";
break;
case 'z' : cout << "hai premuto z";
break;
default : cout << "hai premuto un altro tasto";
}
switch sta ad indicare "controlla il contenuto di ... ", seguito dalla variabile di cui dev'essere controllato il contenuto;
case sta ad indicare "nel caso questo contenuto sia ... ", seguito dal valore da verificare;
i due punti : stanno ad indicare "esegui ... " e sono seguiti da una o più istruzioni da eseguire, divise tra loro da un punto e virgola;
default sta ad indicare "se nessuna delle condizioni precedenti si verifica esegui ... " seguito dall'istruzione da eseguire (default va sempre per ultimo);
break sta ad indicare "dopo aver eseguito l'e istruzioni esci dal blocco", e non è necessario inserirlo nella riga default perché il blocco finisce comunque subito dopo.
Il meccanismo è simile a if, ma bisogna ammetterlo, meno intuitivo.
Tuttavia switch ha un vantaggio, che è quello di saltare subito all'istruzione da eseguire, senza verificare le altre condizioni.
Nel nostro esempio, se l'utente preme il tasto z, il programma salta subito a case 'z' senza passare prima per gli altri due case.
Questo non avviene nelle istruzioni if, else if, else, dove le condizioni vengono verificate una ad una, sinché non si incontra quella vera.
Switch ha anche un grande svantaggio, e cioé possono essere verificati solo valori interi (char compresi), il che ne limita parecchio le possibilità di utilizzo.
Nessun commento:
Posta un commento