Il costrutto for
L’istruzione for implementa la ripetizione enumerativa (o con contatore): si usa quando sappiamo già
quante volte iterare un insieme di istruzioni.
Sintassi generale

forfor (inizializzazione; condizione; aggiornamento) {
// blocco di istruzioni
}
- inizializzazione: imposta il valore iniziale del contatore;
- condizione: stabilisce fino a quando il ciclo prosegue;
- aggiornamento: modifica il contatore ad ogni iterazione.
Nota — Se il corpo del ciclo è una sola istruzione, le parentesi graffe non sono necessarie.
In C++ è comune dichiarare il contatore direttamente nella parte di inizializzazione.
In C++ è comune dichiarare il contatore direttamente nella parte di inizializzazione.
Esempio base
// Stampa i numeri da 1 a 10 (C++)
for (int i = 1; i <= 10; i++) {
cout << i << " ";
}
Funzionamento passo per passo
- Inizializzazione (es.
i = 0). - Valutazione della condizione (es.
i < 10). - Se vera: esegui il corpo, poi l’aggiornamento (es.
i++) e torna al punto 2. - Se falsa: esci dal ciclo.
OSSERVA COME SI FA
1) Somma di 5 numeri interi
#include <iostream>
using namespace std;
int main() {
int somma = 0, numero;
for (int i = 1; i <= 5; i++) {
cout << "Inserire il " << i << "° numero: ";
cin >> numero;
somma += numero;
}
cout << "La somma è " << somma << endl;
return 0;
}
| Fase | i | numero | somma |
|---|---|---|---|
| inizio | — | — | 0 |
| 1ª iterazione | 1 | 5 | 5 |
| 2ª iterazione | 2 | 6 | 11 |
| 3ª iterazione | 3 | 3 | 14 |
| 4ª iterazione | 4 | 1 | 15 |
| 5ª iterazione | 5 | 2 | 17 |
| fine ciclo | — | — | 17 |
2) Stampare i primi n multipli di k
#include <iostream>
using namespace std;
int main() {
int n, k;
do { cout << "Inserisci n > 0: "; cin >> n; } while (n <= 0);
do { cout << "Inserisci k > 0: "; cin >> k; } while (k <= 0);
for (int i = 1; i <= n; i++) {
cout << k*i << endl;
}
return 0;
}
3) Somma k + k² + k³ + … + kⁿ
#include <iostream>
using namespace std;
int main() {
int n, k;
do { cout << "Inserisci n > 0: "; cin >> n; } while (n <= 0);
do { cout << "Inserisci k > 0: "; cin >> k; } while (k <= 0);
long long s = 0, p = 1;
for (int i = 1; i <= n; i++) {
p *= k;
s += p;
}
cout << "La somma è " << s << endl;
return 0;
}
4) Cinque numeri: massimo, media, radice della somma
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int a, max, somma = 0;
for (int i = 0; i < 5; i++) {
cout << "Inserisci il numero " << (i+1) << ": ";
cin >> a;
if (i == 0 || a > max) max = a;
somma += a;
}
double media = somma / 5.0;
cout << "Max: " << max << endl;
cout << "Radice della somma: " << sqrt(somma) << endl;
cout << "Media: " << media << endl;
return 0;
}
5) Numero di Fibonacci
#include <iostream>
using namespace std;
int main() {
int n;
char cont;
do {
do { cout << "Inserisci N (>=0): "; cin >> n; } while (n < 0);
int fibA = 0, fibB = 1;
for (int i = 0; i < n; i++) {
fibB = fibA + fibB;
fibA = fibB - fibA;
}
cout << "Fibonacci(" << n << ") = " << fibB << endl;
cout << "Continui [s/n]? ";
cin >> cont;
} while (cont == 's' || cont == 'S');
return 0;
}
Break e uscita anticipata
// Termina se l'utente inserisce 'Z'
for (int i = 0; i < 10; i++) {
char ch;
cout << "Inserisci una lettera: ";
cin >> ch;
if (ch == 'Z') break;
}
ORA TOCCA A TE — Esercizi con soluzioni
E1. Descrivi a parole il problema risolto dal programma che stampa i primi n termini della successione di Fibonacci.
▶
Mostra soluzione
Soluzione. Il programma riceve in ingresso un intero positivo
e per
i due termini più recenti e si produce il successivo, finché non si sono emessi
n e stampa in ordine i primin termini della successione di Fibonacci. La successione è definita da F(0)=1, F(1)=1,e per
k>1 F(k)=F(k-1)+F(k-2). Ad ogni iterazione si aggiornano due variabili che rappresentanoi due termini più recenti e si produce il successivo, finché non si sono emessi
n valori.
E2. Scrivi un programma che legga N (N>0) e stampi i numeri pari da 2 a 2N.
▶
Mostra soluzione
#include <iostream>
using namespace std;
int main() {
int N;
do { cout << "Inserisci N > 0: "; cin >> N; } while (N <= 0);
for (int i = 1; i <= N; i++) {
cout << 2*i << (i < N ? " " : "\n");
}
return 0;
}
E3. Somma dei multipli di 3 compresi tra 1 e N usando un for con passo opportuno.
▶
Mostra soluzione
#include <iostream>
using namespace std;
int main() {
int N;
do { cout << "Inserisci N >= 1: "; cin >> N; } while (N < 1);
long long somma = 0;
for (int i = 3; i <= N; i += 3) { // passo 3
somma += i;
}
cout << "Somma dei multipli di 3 tra 1 e " << N << " = " << somma << endl;
return 0;
}
Tabelle di traccia — Ciclo for
▶
Mostra
Come si legge la tabella di traccia
- Iterazione: Inizio / 1ª / 2ª / … / Uscita.
- i: valore del contatore.
- Output parziale: quanto stampato fin lì.
- Condizione falsa: quando il ciclo termina.
Esempio: numeri pari da 2 a 2N (N = 5)
| Iterazione | i | Valore stampato | Output parziale |
|---|---|---|---|
| 1ª | 1 | 2 | 2 |
| 2ª | 2 | 4 | 2 4 |
| 3ª | 3 | 6 | 2 4 6 |
| 4ª | 4 | 8 | 2 4 6 8 |
| 5ª | 5 | 10 | 2 4 6 8 10 |
Mini-quiz — Ciclo for (V/F)
Q1. Nel ciclo for, l’aggiornamento del contatore avviene prima del corpo del ciclo. (V/F)
▶
Mostra soluzione
Falso. Sequenza: inizializzazione → test → corpo → aggiornamento. Quindi l’aggiornamento è dopo il corpo.
Q2. Con for (int i = 0; i < 5; i++) il corpo si esegue 5 volte con i = 0,1,2,3,4. (V/F)
▶
Mostra soluzione
Vero. La condizione è
i < 5. Quando i diventa 5, la condizione è falsa e il ciclo termina (iterazioni 0→4).
Q3. L’istruzione continue interrompe definitivamente un ciclo for. (V/F)
▶
Mostra soluzione
Falso.
continue salta il resto del corpo e passa a aggiornamento + nuovo test. Per terminare il ciclo si usa break.