Controllo del flusso dell'esecuzione in C++
Il controllo del flusso dell'esecuzione in C++ permette di dirigere il comportamento di un programma attraverso strutture, dette strutture di controllo del flusso.
In questo modo puoi determinare come e quando determinate parti del codice vengono eseguite. Questo ti permette di implementare anche logiche complesse in un programma.
Un programma non è soltanto una sequenza di istruzioni che vengono eseguite una dopo l'altra. Grazie alla programmazione strutturata puoi ripetere lo stesso codice più volte, saltare un blocco di codice o eseguirlo a seconda se si verifica una o più condizioni, ecc.
Esistono diverse strutture di controllo del flusso in C++.
Istruzioni Condizionali
Le istruzioni condizionali in C++ sono strutture di controllo del flusso che permettono di eseguire diversi blocchi di codice in base al verificarsi di determinate condizioni.
if e else
Esegue il codice all'interno dell'if se la condizione è vera, altrimenti, viene eseguito il codice nell'else.
if (condizione) { /* codice */ } else { /* codice alternativo */ }
else if
Questa clausola ti permette di verificare più condizioni in sequenza in una struttura if else
if (condizione1) { /* codice */ } else if (condizione2) { /* codice */ } else { /* altro codice */ }
E' molto utile per eseguire diversi blocchi di codice a seconda delle diverse condizioni.
Esempio. Questo programma verifica se un numero intero (numero) è pari o dispari. Utilizza l'operatore modulo (%) per calcolare il resto della divisione del numero per 2. Se il resto è zero (condizione numero % 2 == 0), significa che il numero è pari e stampa "Il numero è pari". Altrimenti, se il resto non è zero, stampa "Il numero è dispari".
- int numero = 4;
- if (numero % 2 == 0) {
- cout << "Il numero è pari";
- } else {
- cout << "Il numero è dispari";
- }
In questo esempio specifico, poiché la variabile "numero" è 4, il programma stampa "Il numero è pari".
Operatore ternario
C'è anche una versione ridotta di if-else:
condizione ? espressione1 : espressione2
Se la condizione è vera, viene valutata espressione1; altrimenti, espressione2.
Ad esempio, la struttura condizionale che valuta se un numero è pari o dispari si riduce a una singola riga.
- int numero = 4;
- cout << (numero % 2 == 0 ? "Il numero è pari" : "Il numero è dispari");
In questo esempio, la condizione (numero % 2 == 0) viene valutata per determinare se numero è pari.
Se la condizione è vera, viene stampata la stringa "Il numero è pari". Altrimenti, viene stampata la stringa "Il numero è dispari".
Tutto ciò avviene in una sola espressione concisa.
Switch
La struttura condizione switch permette di eseguire diversi blocchi di codice a seconda del valore di una variabile.
switch (variabile) { case valore1: /* codice */ break; case valore2: /* codice */ break; default: /* codice */ }
Ogni case termina con un break per evitare l'esecuzione dei case successivi.
Ecco un esempio pratico.
- char voto = 'A';
- switch (voto) {
- case 'A':
- cout << "Eccellente!";
- break;
- case 'B':
- case 'C':
- cout << "Buono!";
- break;
- default:
- cout << "Voto non valido";
- }
In questo caso la variabile "voto" contiene il valore 'A', quindi viene eseguito il primo case.
Eccellente!
L'istruzione break interrompe l'esecuzione forzando l'uscita dalla struttura condizionale e il programma salta alla prima istruzione disponibile subito dopo la struttura.
Cicli
Le strutture cicliche in programmazione, come for, while e do-while, sono costrutti che permettono di ripetere un blocco di codice più volte fino al verificarsi di una condizione specifica. Sono utilizzate per eseguire operazioni ripetitive, come iterare su elementi di un array o ripetere un'azione finché una certa condizione rimane vera.
while
La struttura while esegue un blocco di codice finché una condizione è vera:
while (condizione) { /* codice */ }
Questa struttura ciclica non esegue un numero predeterminato di iterazioni.
Quindi, è molto importante aggiornare la condizione all'interno del ciclo, in caso contrario si rischia un loop infinito.
do-while
E' simile al while, ma il blocco di codice viene eseguito almeno una volta:
do { /* codice */ } while (condizione);
Il programma esegue il codice, poi verifica se la condizione è vera.
Se è vera, esegue di nuovo il codice e via dicendo.
Quindi, il blocco di codice viene eseguito almeno una volta se la condizione è falsa.
for
La struttura ciclica for compie un numero predefinito di iterazioni.
for (inizializzazione; condizione; incremento) { /* codice */ }
In questo caso il ciclo non dipende da una condizione.
Una volta compiute le iterazioni definite, il ciclo termina di essere eseguito.
Il controllo del flusso in C++ è fondamentale per gestire la logica dei programmi. La scelta tra if, while, for e switch dipende dal contesto specifico e dall'obiettivo che si vuole raggiungere.
Istruzioni di controllo del flusso all'interno dei cicli
Alcune istruzioni ti permettono di modificare il comportamento di una struttura ciclica quando viene eseguita.
break
Questa istruzione interrompe l'esecuzione del ciclo più interno.
break
Può essere utilizzato nei cicli while, for e nelle strutture condizionali switch.
continue
Questa istruzione salta il resto del codice nel ciclo corrente e prosegue con la prossima iterazione.
continue
E' utile per saltare un'iterazione sotto determinate condizioni senza interrompere l'intero ciclo.