I cicli, le ripetizioni, le ripetizioni, le ripetizioni
Nei programmi, spesso è necessario ripetere un’azione più volte. I cicli permettono di fare questo in modo efficiente, evitando di scrivere più volte lo stesso codice.
Concetti chiave sulla macchina e i cicli
Tipicamente un ciclo è composto da
- Corpo del ciclo: le istruzioni che vengono ripetute n volte
- Condizione: questa condizione è una condizione booleana e viene valutata a ogni ripetizione, per capire se continuare a ripetere oppure uscire
Quando il programma esegue un ciclo, vengono seguiti questi passaggi fondamentali:
- Valuta la condizione: decide se entrare o continuare il ciclo.
- Esegue il corpo del ciclo: il codice che deve essere ripetuto.
- Aggiorna le variabili: spesso si modifica una variabile in modo che a un certo punto si verifichi la condizione di uscita.
- Ripete: torna a valutare la condizione.
Tipi di ciclo
Ciclo for
Il ciclo for è ideale quando si conosce in anticipo quante volte eseguire un’azione.
Sintassi di base
for (inizializzazione; condizione; aggiornamento) {
// corpo del ciclo
}
- inizializzazione: si esegue una sola volta all’inizio (es.
int i = 1;) - condizione: viene controllata prima di ogni iterazione
- aggiornamento: eseguito dopo ogni iterazione (es.
i++)
Esempio pratico: stampare i numeri da 1 a 5
#include <iostream>
using namespace std;
int main() {
for (int i = 1; i <= 5; i++) {
cout << "Iterazione numero: " << i << endl;
}
return 0;
}
Output:
Iterazione numero: 1
Iterazione numero: 2
Iterazione numero: 3
Iterazione numero: 4
Iterazione numero: 5
Spiegazione passo passo
iviene inizializzato a 1.- La condizione
i <= 5viene controllata: se è vera, si entra nel ciclo. - Viene eseguito il corpo del ciclo, che stampa il valore di
i. - Alla fine del ciclo,
iviene incrementato di 1 (i++). - Si torna a controllare la condizione.
- Quando
idiventa 6, la condizione è falsa e il ciclo termina.
Possibili errori comuni
- Incremento dimenticato: se non si incrementa
i, il ciclo sarà infinito. - Condizione sbagliata: ad esempio usare
i < 5invece dii <= 5cambia il numero di iterazioni. - Inizializzazione errata: iniziare da un valore diverso da quello desiderato può confondere.
Ciclo while
Il ciclo while è usato quando non si sa esattamente quante volte ripetere, ma si vuole continuare finché una condizione è vera.
Sintassi di base
while (condizione) {
// corpo del ciclo
}
Esempio pratico: contare da 0 a 2
#include <iostream>
using namespace std;
int main() {
int n = 0;
while (n < 3) {
cout << "n vale: " << n << endl;
n++;
}
return 0;
}
Output:
n vale: 0
n vale: 1
n vale: 2
Spiegazione passo passo
nè inizializzato a 0.- La condizione
n < 3viene controllata. - Se vera, si esegue il corpo del ciclo: stampa e incremento di
n. - Si torna a controllare la condizione.
- Quando
ndiventa 3, la condizione è falsa e il ciclo termina.
Errori comuni
- Condizione mai vera: se
nfosse inizializzato a 5, il ciclo non partirebbe mai. - Incremento mancante: senza
n++, il ciclo non termina mai (ciclo infinito). - Modifica della variabile fuori dal ciclo: può causare confusione nel flusso.
Ciclo do-while
Il ciclo do-while è simile al while, ma garantisce che il corpo venga eseguito almeno una volta, perché la condizione viene controllata dopo l’esecuzione.
Sintassi di base
do {
// corpo del ciclo
} while (condizione);
Esempio pratico: contare da 5 a 1
#include <iostream>
using namespace std;
int main() {
int x = 5;
do {
cout << "x vale: " << x << endl;
x--;
} while (x > 0);
return 0;
}
Output:
x vale: 5
x vale: 4
x vale: 3
x vale: 2
x vale: 1
Spiegazione passo passo
- Il ciclo entra nel corpo senza controllare la condizione.
- Stampa il valore di
xe lo decrementa. - Dopo il corpo, controlla se
x > 0. - Se vero, ripete il ciclo; altrimenti termina.
Quando usare do-while
- Quando vuoi che il ciclo venga eseguito almeno una volta, ad esempio per chiedere un input all’utente e poi verificare se continuare.
Attenzione
- Anche qui, senza decremento o modifica della variabile, si rischia un ciclo infinito.
Ricapitoliamo
- Ciclo
for: usato quando si conosce il numero di iterazioni; include inizializzazione, condizione e aggiornamento in un’unica struttura. - Ciclo
while: continua finché una condizione è vera; la condizione è controllata prima di ogni iterazione. - Ciclo
do-while: simile alwhile, ma il corpo del ciclo viene eseguito almeno una volta perché la condizione viene valutata dopo.
Domande guida
- Come faccio a ripetere un’azione più volte finché una condizione non cambia? Es. propongo un menù all’utente, finché non sceglie di uscire
- Come posso evitare che un ciclo diventi infinito?
- Come posso assicurarmi che la variabile di controllo venga aggiornata correttamente?
- In quali casi è meglio usare un ciclo
do-whilerispetto a unwhile? - Come posso verificare che la condizione del ciclo sia corretta per il numero di iterazioni desiderato?
- Cosa succede se modifico la variabile di controllo dentro il corpo del ciclo in modi non previsti?
- Come posso usare i cicli per scorrere elementi di un array o di una lista?
- Come posso interrompere un ciclo prima che la condizione diventi falsa?