Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
# 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:
```cpp
cout << 1 << endl;
cout << 2 << endl;
cout << 3 << endl;
cout << 4 << endl;
cout << 5 << endl;
```
Con un ciclo:
```cpp
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
```cpp
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
```cpp
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
```cpp
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
```cpp
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
```cpp
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:
1. **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.
2. **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.
---
## Esempi pratici
### 1. Stampare i numeri pari da 2 a 20 (numero di iterazioni noto)
```cpp
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:
```cpp
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`:
```cpp
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:
```cpp
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.