Sostieni AppuntiFacili con una piccola donazione su PayPal

Dona con PayPal
AppuntiFacili
Torna Indietro Segnala errore

Cicli

✍️ Dennis Turco 🏷️ Informatica 📘 C++
Ultima modifica:
#c++#programmazione#cicli

1. Introduzione ai cicli

I cicli permettono di eseguire più volte un blocco di istruzioni.

Sono fondamentali quando dobbiamo:

  • ripetere operazioni
  • elaborare sequenze di dati
  • evitare codice ripetuto

In C++ esistono tre principali tipi di ciclo:

  • for \rightarrow numero di ripetizioni noto
  • while \rightarrow condizione controllata prima
  • do-while \rightarrow eseguito almeno una volta

2. Ciclo For

Il ciclo for viene utilizzato quando conosciamo quante volte vogliamo ripetere un’operazione.

2.1 Sintassi

for (inizializzazione; condizione; aggiornamento) {
    // istruzioni
}

L’istruzione per richiamare il ciclo for si caratterizza è da 4 parti:

  1. dichiarazione (non sempre!) e assegnazione di una variabile contatore,
  2. condizione del ciclo,
  3. aggiornamento della variabile contatore,
  4. corpo del ciclo.

2.2 Esempio

Il seguente ciclo scrive per 10 volte sullo schermo la parola “ciao”.

#include <iostream>
using namespace std;

int main() {

    for (int i = 0; i < 10; i++) {
        cout << "ciao" << endl;
    }

    return 0;
}

dove:

  1. int i=0 \rightarrow Dichiarazione e assegnazione di una variabile contatore;
  2. i < 10 \rightarrow Condizione del ciclo for;
  3. i++ \rightarrow Aggiornamento della variabile contatore;

2.3 Esempio

#include <iostream>
using namespace std;

int main() {

    // il primo ciclo viene ripetuto 5 volte
    // il secondo ciclo viene ripetuto 5 volte

    int val2 = 0;

    for (int i = 0; i < 5; i++) {
        val2++;
    }

    for (int a = 0; a < 5; a++) {
        val2++;
    }

    cout << "Valore = " << val2 << endl << endl;
}

2.6 Cicli annidati

È possibile inserire un ciclo dentro un altro ciclo.

2.6.1 Esempio

#include <iostream>
using namespace std;

int main() {

    // il primo ciclo viene ripetuto 5 volte
    // il secondo ciclo viene ripetuto 5 volte * 5 volte

    int val = 1;

    for (int i=0; i<5; i++) {
        for (int a=0; a<5; a++) {
            cout << "i = " << i << endl;
            cout << "a = " << a << endl;
            cout << "Valore = " << val << endl << endl;
            val++; //  => val = val + 1;
        }
    }

}

2.6.2 Esempio

#include <iostream>
using namespace std;

int main() {

    // il primo ciclo viene ripetuto 5 volte
    // il secondo ciclo viene ripetuto 5*5 volte
    // il terzo ciclo viene ripetuto 5*5*3 volte

    int val3 = 1;

    for (int i = 0; i < 5; i++) {
        for (int a = 0; a < 5; a++) {
            for (int x = 0; x < 3; x++) {
                cout << "i = " << i << endl;
                cout << "a = " << a << endl;
                cout << "x = " << x << endl;
                cout << "Valore = " << val3 << endl << endl;
                val3++; //  => val = val + 1;
            }
        }
    }
}

Ogni ciclo interno viene eseguito completamente ad ogni iterazione del ciclo esterno.


## 3. Ciclo While

L'istruzione **while** prevede che prima venga valutata la *condizione* e poi, se è vera, verranno eseguite le *operazioni* all'interno del ciclo.
Ecco perchè si definisce **pre-condizionale**.

Quando la condizione diventa falsa il ciclo si interrompe e si passa all'istruzione successiva.

Il ciclo potrebbe **non essere mai eseguito** se la condizione non fosse vera in partenza.

Il ciclo potrebbe essere **infinito** se la condizione risultasse sempre vera. In questo caso si genera un **loop**.

### 3.1 Sintassi

L'utilizzo tipico del while prevede quasi sempre l'esecuzione di un blocco di istruzioni, quindi quasi sempre troviamo il costrutto espresso nella forma:

```cpp
while (condizione) {
    // Istruzioni da eseguire
}

3.2 Esempio

Generiamo i numeri da 0 a 10, a step di 2, utilizzando il ciclo while in C++

#include <iostream>
using namespace std;

int main() {
    int count = 0;
    while(count <= 10) {
        cout << count << endl;
        count = count + 2;
    }

    return 0;
}

WARNING

Attenzione ai cicli infiniti: se la condizione rimane sempre vera il programma non termina

4. Ciclo Do-While

L’idea alla base del ciclo do-while sta nel fatto che prima si entra nel ciclo (viene eseguito il corpo del ciclo), poi si controllo. Per questa ragione viene definito post-condizionale

In altre parole il corpo del ciclo do-while viene eseguito almeno una volta.

La semantica del costrutto do-while è dunque la seguente:

  1. Si esegue l’istruzione (o più di una);
  2. Si valuta la condizione, la quale può essere vera o falsa.
  3. Se la condizione è vera si ritorna al punto 1; altrimenti si passa all’istruzione successiva.

4.1 Sintassi

Troviamo il costrutto espresso nella forma:

do {
    // istruzioni;
} while (condizione);

4.2 Esempio

Continuare a leggere numeri finché non viene inserito un valore negativo.

#include <iostream>
using namespace std;

int main() {
    int valore;

    do {
        cout << "Inserire valore negativo: ";
        cin >> valore;
    }
    while (valore >= 0);
    // il ciclo continua fintanto che non si inserisce un valore negativo
}

5. Istruzioni break e continue

Durante l’esecuzione di un ciclo può essere necessario modificare il comportamento normale del flusso.

C++ mette a disposizione due istruzioni fondamentali:

  • break
  • continue

5.1 Istruzione break

L’istruzione break permette di interrompere immediatamente un ciclo.

Quando viene eseguita:

  1. il ciclo termina.
  2. il programma continua dopo il ciclo.

5.1.1 Esempio

Interrompere il ciclo quando viene trovato il numero 5.

#include <iostream>
using namespace std;

int main() {

    for (int i = 0; i < 10; i++) {

        if (i == 5) {
            break;
        }

        cout << i << endl;
    }

    cout << "Ciclo terminato";
}

5.2 Istruzione continue

L’istruzione continue non interrompe il ciclo.

  1. salta solo l’iterazione corrente
  2. passa direttamente alla successiva

5.2.1 Esempio

Stampare solo numeri dispari.

#include <iostream>
using namespace std;

int main() {

    for (int i = 0; i < 10; i++) {

        if (i % 2 == 0) {
            continue;
        }

        cout << i << endl;
    }
}

6. In Sintesi

CicloQuando usarlo
fornumero di iterazioni noto
whilecontrollo prima dell’esecuzione
do-whileesecuzione garantita almeno una volta
IstruzioneEffetto
breaktermina completamente il ciclo
continuesalta solo l’iterazione corrente

7. Quiz a risposta multipla

Quando è preferibile usare un ciclo for?

Quale ciclo viene eseguito almeno una volta?

Quando un ciclo while può non essere eseguito?

Cosa provoca un ciclo infinito?

Un ciclo dentro un altro ciclo si chiama:

Cosa fa l'istruzione break?

Cosa fa continue?

8. Esercizi

MIX esercizi if/for/while in C++

8.1 Esercizio - Numeri da 1 a N

Realizzare un programma che chiede un numero N e stampa i numeri da 1 a N.

💡 Mostra soluzione
#include <iostream>
using namespace std;

int main() {

    int n;
    cout << "Inserisci N: ";
    cin >> n;

    for(int i = 1; i <= n; i++){
        cout << i << endl;
    }

    return 0;
}

8.2 Esercizio - Somma dei numeri

Calcolare la somma dei numeri da 1 a N usando il ciclo while.

💡 Mostra soluzione
#include <iostream>
using namespace std;

int main(){

    int n, i = 1, somma = 0;

    cout << "Inserisci N: ";
    cin >> n;

    while(i <= n){
        somma += i;
        i++;
    }

    cout << "Somma = " << somma;

    return 0;
}

8.3 Esercizio - Indovina il numero

Il programma continua a chiedere un numero finché l’utente non inserisce 0.

💡 Mostra soluzione
#include <iostream>
using namespace std;

int main(){

    int numero;

    do {
        cout << "Inserisci un numero (0 per uscire): ";
        cin >> numero;
    } while(numero != 0);

    cout << "Programma terminato";

    return 0;
}
Prenota una lezione