Ciclo for
A cosa serve il ciclo for?
Sezione intitolata “A cosa serve il ciclo for?”Per stampare i numeri da 1 a 100 non serve scrivere cento istruzioni separate.
Il ciclo for ripete un blocco di codice controllando inizializzazione, condizione e aggiornamento.
La struttura del ciclo for
Sezione intitolata “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
Sezione intitolata “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.
In questo esempio il contatore parte da zero, aumenta di uno e si ferma prima di arrivare a cinque.
Contare in avanti
Sezione intitolata “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
Sezione intitolata “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
Sezione intitolata “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
Sezione intitolata “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)
Sezione intitolata “Il for su una collezione (range-based for)”In C++ moderno puoi usare una forma di for che visita 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
Sezione intitolata “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
Sezione intitolata “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...