Quando parliamo di ciclo for parliamo di iterazione definita ovvero di quando abbiamo delle istruzioni da ripetere e conosciamo quante volte vogliamo ripeterle.
Il seguente ciclo scrive per 10 volte sullo schermo la parola “ciao”.
for(int i=0; i<10; i++) {
printf("ciao\n");
}
L’istruzione per richiamare il ciclo for
si caratterizza è da 4 parti:
nell’esempio precedente:
int i=0
→ Dichiarazione e assegnazione di una variabile contatore;i < 10
→ Condizione del ciclo for;i++
→ Aggiornamento della variabile contatore;esempio 1:
#include <stdio.h>
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++;
}
printf("Valore = %d\n", val2);
}
esempio 2:
#include <stdio.h>
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++) {
printf("i = %d\n", i);
printf("a = %d\n", a);
printf("Valore = %d\n", val);
val++; // => val = val + 1;
}
}
}
esempio 3:
#include <stdio.h>
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++) {
printf("i = %d\n", i);
printf("a = %d\n", a);
printf("x = %d\n", x);
printf("Valore = %d\n", val3);
val3++; // => val = val + 1;
}
}
}
}
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.
L’utilizzo tipico del while prevede quasi sempre l’esecuzione di un blocco di istruzioni, quindi quasi sempre troviamo il costrutto espresso nella forma:
while(condizione) {
// Istruzioni da eseguire
}
esempio: Generiamo i numeri da 0 a 10, a step di 2, utilizzando il ciclo while in C++
#include <stdio.h>
int main() {
int count = 0;
while(count <= 10) {
printf("%d\n", count);
count = count + 2;
}
return 0;
}
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.
In altre parole il corpo del ciclo do-while viene eseguito almeno una volta.
La semantica del costrutto do-while è dunque la seguente:
troviamo il costrutto espresso nella forma:
do {
// istruzioni;
} while (condizione);
esempio:
inserire un valore finchè non viene letto un valore negativo.
#include <stdio.h>
int main() {
int valore;
do {
printf("Inserire valore negativo: ");
scanf("%d", &valore);
} while (valore >= 0);
// il ciclo continua fintanto che non si inserisce un valore negativo
}
MIX esercizi if/for/while in C++
1) Quale dei seguenti cicli continua ad eseguire il blocco di codice finché una condizione specificata è vera?
2) Qual è la differenza principale tra un ciclo while e un ciclo do-while?
3) Quante volte viene eseguito un ciclo while se la condizione è inizialmente vera ma diventa falsa dopo 3 iterazioni?
4) Quale dei seguenti cicli è più appropriato utilizzare quando si conosce a priori il numero esatto di iterazioni da eseguire?
5) Cosa succede se dimentichiamo di incrementare il contatore all'interno di un ciclo for che utilizza una condizione come i < 10?