C++: i costrutti iterativi

I costrutti iterativi sono la parte del linguaggio che ci permette di eseguire un blocco di codice più volte. Ce ne sono di due famiglie: quelli con un numero predeterminato di iterazioni (il ciclo for) e quelli con un numero indeterminato (while e do while). Controllare il flusso del programma è una delle abilità di base di qualunque sviluppatore, quindi vale la pena padroneggiarli.

Per compilare riutilizziamo il Makefile generico della puntata precedente: copiatelo in ogni cartella e cambiate solo i nomi se serve.

Il ciclo for

Il ciclo più semplice possibile è l’iterazione per un numero di volte noto in anticipo. Il for ha tre parti:

  • l’inizializzazione, dove diamo il valore iniziale alla variabile di ciclo;
  • la condizione booleana: finché è vera il ciclo viene eseguito (qui a minore di 10);
  • l’espressione di incremento, che modifica la variabile di ciclo in modo che prima o poi la condizione smetta di essere vera. a++ incrementa di 1 una variabile intera, ed equivale a a = a + 1.

Usiamo iostream e un main come al solito:

#include <iostream>

int main() {
    int a;

    for (a = 0; a < 10; a++) {
        std::cout << "ciao mondo" << std::endl;
    }

    return 0;
}

Compilando e lanciando, il ciclo viene eseguito 10 volte e a terminale compaiono dieci righe:

ciao mondo

Il ciclo while

I cicli indeterminati non permettono sempre di sapere in anticipo quante iterazioni verranno fatte, perché la condizione può essere modificata all’interno del ciclo. Cominciamo con un while strutturato come il for di prima: la condizione è equivalente a quella del secondo blocco del for, e l’incremento lo facciamo noi dentro il blocco.

#include <iostream>

int main() {
    int a = 0;

    while (a < 10) {
        std::cout << "ciao mondo" << std::endl;
        a++;
    }

    return 0;
}

In questo caso il while si comporta come il for: è soltanto una struttura diversa, e l’output è sempre dieci volte “ciao mondo”.

Ora facciamo qualcosa di più interessante: sommiamo dei numeri inseriti dall’utente finché la somma non raggiunge una certa soglia. Ci serve una seconda variabile, s, inizializzata a zero. Nel while non incrementiamo più a: controlliamo che s sia minore di 10, chiediamo un numero all’utente con cin, come abbiamo visto nella puntata sugli stream, e lo sommiamo a s. s += a è la versione corta di s = s + a. Alla fine stampiamo la somma:

#include <iostream>

int main() {
    int a;
    int s = 0;

    while (s < 10) {
        std::cout << "Inserisci un numero: ";
        std::cin >> a;
        s += a;
    }

    std::cout << "La somma e' " << s << std::endl;

    return 0;
}

Una sessione di esempio, inserendo 3, 5 e 7:

Inserisci un numero: 3
Inserisci un numero: 5
Inserisci un numero: 7
La somma e' 15

Il numero di iterazioni qui non dipende dal ciclo in sé, ma da quello che succede al suo interno: con 7 e 5 le iterazioni sono due, con 2, 3, 1, 2, 3 e così via sono molte di più.

Il ciclo do while

Il do while si distingue dal while per un dettaglio: nel while la condizione è all’inizio, quindi se è falsa in entrata il blocco non viene mai eseguito; nel do while la condizione viene dopo il blocco, che quindi viene eseguito almeno una volta. La struttura è simile: si comincia con do, e il while finale richiede un punto e virgola, perché non è seguito da un blocco.

#include <iostream>

int main() {
    int a;
    int s = 0;

    do {
        std::cout << "Inserisci un numero: ";
        std::cin >> a;
        s += a;
    } while (s < 10);

    std::cout << "La somma e' " << s << std::endl;

    return 0;
}

Con questo esempio il comportamento del programma visto da fuori non cambia (inserendo 4, 5 e 6 la somma è 15), ma quando le condizioni si fanno più complicate la differenza fra “eseguito almeno una volta” e “magari mai” può servire.

Per concludere

Chiudete tutto, aprite la vostra Linux box e sperimentate con for, while e do while: cambiate le soglie, cambiate le condizioni e guardate che cosa succede.

Link e risorse

Sostieni il canale

PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
ma se vuoi offrirmi un caffè, mi aiuterà a rimanere sveglio mentre registro i video 😁☕
clicca qui per scoprire come https://buymeacoffee.com/thelinuxnerd

questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!