Cicli in C++
Perché utilizzare i cicli?
I cicli permettono di ripetere operazioni automaticamente, rendendo il codice più semplice, leggibile e gestibile. Con i cicli possiamo:
- Evitare ripetizioni manuali di codice.
- Gestire grandi volumi di dati in modo efficiente.
- Risolvere problemi iterativi come elaborazioni di input, calcoli o operazioni ripetitive.
Esempio: Senza un ciclo, per stampare i numeri da 1 a 5:
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
cout << 4 << endl;
cout << 5 << endl;
Con un ciclo:
for (int i = 1; i <= 5; i++) {
cout << i << endl;
}
Tipi di cicli in C++
In C++ esistono due tipi principali di cicli: for e while. Sebbene possano essere utilizzati per svolgere gli stessi compiti, ciascuno è ottimizzato per un determinato scenario.
Il ciclo for
Il ciclo for si usa quando si conosce in anticipo quante volte eseguire l’operazione o quando il programma può calcolare il numero di iterazioni prima di iniziare il ciclo.
Esempio: Stampare i numeri da 1 a 10
for (int i = 1; i <= 10; i++) {
cout << i << " ";
}
// Output: 1 2 3 4 5 6 7 8 9 10
Il ciclo for è particolarmente utile per contare o iterare su sequenze predefinite. La sintassi include:
- Inizializzazione (
int i = 1) - Condizione (
i <= 10, il ciclo continua fino a quando questa condizione è vera) - Incremento (
i++, incremento della variabile di controllo)
Il ciclo while
Il ciclo while si utilizza quando il numero di iterazioni non è noto in anticipo. Funziona eseguendo il corpo del ciclo fino a quando una condizione specifica è vera. Questo lo rende utile per problemi dove le iterazioni dipendono da eventi dinamici, come input utente o calcoli progressivi.
Esempio: Continuare a leggere numeri finché la loro somma non supera 100
int somma = 0, numero;
cout << "Inserisci numeri (fermati quando la somma supera 100):" << endl;
while (somma <= 100) {
cin >> numero;
somma += numero;
}
cout << "Somma totale: " << somma << endl;
Qui non possiamo sapere a priori quanti numeri l’utente inserirà per superare 100.
Esempio: Cercare un numero in un array senza sapere se è presente
int arr[] = {3, 5, 7, 9, 11, 13};
int lunghezza = 6;
int target = 9, i = 0;
while (i < lunghezza && arr[i] != target) {
i++;
}
if (i < lunghezza) {
cout << "Numero trovato all'indice: " << i << endl;
} else {
cout << "Numero non trovato" << endl;
}
Il ciclo while qui cerca il numero finché non lo trova o finché non ha verificato tutti gli elementi.
Il ciclo do-while
Il ciclo do-while è una variante del ciclo while dove il corpo del ciclo viene eseguito almeno una volta prima di verificare la condizione.
Esempio: Chiedere un numero finché non è positivo, ma garantendo almeno una richiesta
int numero;
do {
cout << "Inserisci un numero positivo: ";
cin >> numero;
} while (numero <= 0);
cout << "Grazie! Hai inserito: " << numero << endl;
In questo caso, anche se l’utente inserisse un numero positivo al primo tentativo, il messaggio verrebbe comunque mostrato almeno una volta.
Esempio: Mostrare un menu all’utente almeno una volta
int scelta;
do {
cout << "Digita 1 per Giocare, 2 per Uscire";
cin >> scelta;
} while (scelta != 1 && scelta != 2);
if (scelta == 1) {
cout << "Inizia il gioco!" << endl;
} else {
cout << "Esci dal gioco." << endl;
}
Scegliere il ciclo giusto
Per scegliere il ciclo più adatto, possiamo seguire una serie di domande:
-
So di preciso quante volte devo svolgere l’operazione? o Il programma, prima di iniziare il ciclo, saprà quante volte dovrà iterare?
- Se sì, utilizza un ciclo
for. - Se no, procedi con la domanda successiva.
- Se sì, utilizza un ciclo
-
Almeno quante volte voglio che venga eseguita l’operazione?
- Se 0, utilizza un ciclo
while. - Se 1, utilizza un ciclo
do-while. - Se maggiore di 1, scegli il ciclo che risulta più comodo per il tuo caso specifico.
- Se 0, utilizza un ciclo
Esempi pratici
1. Stampare i numeri pari da 2 a 20 (numero di iterazioni noto)
for (int i = 2; i <= 20; i = i+2) {
cout << i << " ";
}
// Output: 2 4 6 8 10 12 14 16 18 20
2. Fermarsi quando si verifica una condizione dinamica
Continuare a sommare numeri finché la somma non supera 100:
int somma = 0, numero;
cout << "Inserisci numeri:" << endl;
while (somma <= 100) {
cin >> numero;
somma += numero;
}
cout << "Somma totale: " << somma << endl;
3. Validare un input
Utilizzo di un ciclo do-while:
int anni;
do {
cout << "Quanti anni hai?"<<endl;
cin >> anni;
} while (anni <= 0);
cout << "Hai " << anni << " anni" << endl;
4. Ricerca di un elemento in un array
Cerchiamo un numero finché non lo troviamo o finché non esauriamo l’array:
int arr[] = {3, 5, 7, 9, 11, 13};
int lunghezza = 6;
int target = 7;
// Al termine del ciclo la variabile 'i' esisterà ancora
// e "conterrà" la posizione in cui è presente il valore target
int i = 0;
while (i < lunghezza && arr[i] != target) {
i++;
}
if (i < lunghezza) {
cout << "Numero trovato all'indice: " << i << endl;
} else {
cout << "Numero non trovato" << endl;
}
Questo esempio ci mostra come la condizione del nostro ciclo while o do-while possa essere composta da più condizioni effettive unite tra loro da un operatore logico.