Ciclo for
A cosa serve il ciclo for?
Section titled “A cosa serve il ciclo for?”Immagina di dover stampare i numeri da 1 a 100. Scriveresti 100 righe di codice? Certo che no.
Il ciclo for ti permette di ripetere un blocco di codice un numero preciso di volte. Scrivi il codice una volta sola, e il programma lo esegue quante volte vuoi.
La struttura del ciclo for
Section titled “La struttura del ciclo for”for (inizio; condizione; aggiornamento) { // codice da ripetere}Un esempio concreto:
for (int i = 0; i < 5; i++) { cout << i << endl;}Output:
01234Le tre parti del for
Section titled “Le tre parti del for”for (int i = 0; i < 5; i++) {// ^^^^^^^^^ ^^^^^^^ ^^^// inizio cond. aggiorn.- Inizio (
int i = 0): viene eseguita una sola volta, all’inizio. Crea il “contatore” del ciclo. - Condizione (
i < 5): viene controllata prima di ogni ripetizione. Se è falsa, il ciclo si ferma. - Aggiornamento (
i++): viene eseguito alla fine di ogni ripetizione. Di solito aumenta il contatore.
Pensa al ciclo for come a un cronometro: parti da zero, vai avanti di uno in uno, ti fermi quando arrivi al limite.
Contare in avanti
Section titled “Contare in avanti”// Da 1 a 10for (int i = 1; i <= 10; i++) { cout << i << " ";}// Output: 1 2 3 4 5 6 7 8 9 10Contare all’indietro
Section titled “Contare all’indietro”// Da 10 a 1 — basta cambiare inizio, condizione e aggiornamentofor (int i = 10; i >= 1; i--) { cout << i << " ";}// Output: 10 9 8 7 6 5 4 3 2 1Passo diverso da 1
Section titled “Passo diverso da 1”Non devi necessariamente aumentare di uno alla volta:
// Solo i numeri pari da 0 a 10for (int i = 0; i <= 10; i += 2) { cout << i << " ";}// Output: 0 2 4 6 8 10
// Multipli di 5for (int i = 5; i <= 25; i += 5) { cout << i << " ";}// Output: 5 10 15 20 25Cicli annidati
Section titled “Cicli annidati”Puoi mettere un ciclo dentro un altro. Utile per lavorare con griglie, tabelle o schemi:
// Per ogni riga (i) eseguiamo tutto il ciclo delle colonne (j)for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { cout << i * j << "\t"; // \t è il tabulatore (allinea le colonne) } cout << endl; // vai a capo dopo ogni riga}Output (tabellina pitagorica 3x3):
1 2 32 4 63 6 9Il for su una collezione (range-based for)
Section titled “Il for su una collezione (range-based for)”In C++ moderno puoi usare una forma più semplice di for per scorrere gli elementi di una lista o di una stringa, senza gestire manualmente l’indice:
// Scorre ogni carattere della stringa nomestring nome = "Alice";for (char c : nome) { cout << c << " ";}// Output: A l i c e
// Scorre ogni numero dell'arrayint numeri[] = {10, 20, 30, 40, 50};for (int n : numeri) { cout << n << " ";}// Output: 10 20 30 40 50La sintassi è: for (tipo elemento : collezione). Si legge “per ogni elemento nella collezione”.
Usare auto per non specificare il tipo
Section titled “Usare auto per non specificare il tipo”Se non vuoi scrivere il tipo dell’elemento, puoi usare auto e lasciare che il compilatore lo capisca da solo:
int numeri[] = {1, 2, 3, 4, 5};for (auto n : numeri) { cout << n * 2 << " "; // stampa il doppio di ogni numero}// Output: 2 4 6 8 10Esempio pratico: tabella delle potenze
Section titled “Esempio pratico: tabella delle potenze”#include <iostream>using namespace std;
int main() { // Intestazione della tabella cout << "n\tn²\tn³" << endl; cout << "---\t---\t---" << endl;
// Calcoliamo n², n³ per ogni numero da 1 a 10 for (int n = 1; n <= 10; n++) { cout << n << "\t" << n*n << "\t" << n*n*n << endl; }
return 0;}Output:
n n² n³--- --- ---1 1 12 4 83 9 274 16 645 25 125...