Corso di Informatica
(Programmazione)
Lezione 11 (19 novembre 2008)
Programmazione in Java:
controllo del flusso (iterazione)
1
Controllo del flusso
Il controllo del flusso è l’esecuzione ordinata di una
sequenza di istruzioni. Il controllo del flusso (che
vediamo…) può essere:
sequenziale
esegue le istruzioni una alla volta nell’ordine in cui
sono state scritte
selezione (che abbiamo già visto…)
esegue le istruzioni scelte tra almeno due possibilità
iterazione
esegue ripetutamente delle istruzioni finchè si
verifica una certa condizione
2
Iterazione
I costrutti di iterazione sono:
while
do-while
for
Un costrutto di iterazione ripete l’esecuzione di
un blocco di codice finché si verifica una
determinata condizione data da un’espressione
booleana (che restituisce true quando la
condizione è verificata e false in caso
contrario)
3
Iterazione WHILE
Il costrutto di iterazione while permette di eseguire
ripetutamente un blocco di istruzioni
while(<boolEXPR>){
<BLOCK>;
}
<instruction_afterWHILE>;
...
dove <boolEXPR> è l’espressione booleana che valutata decide di
iterare o meno l’esecuzione del blocco di istruzioni definito da
<BLOCK>. Ogni volta che tutte le istruzioni di <BLOCK> vengono
eseguite, si valuta nuovamente <boolEXPR> e si decide se
rieseguire <BLOCK>. Non appena la valutazione di <boolEXPR>
restituisce false, <BLOCK> viene saltato, il controllo diventa
sequenziale e viene eseguita l’istruzione successiva
4
<instruction_afterWHILE>.
Iterazione WHILE
Quindi:
<boolEXPR> determina la terminazione delle
iterazioni e quindi l’uscita dal ciclo while
all’interno di <BLOCK> ci deve essere qualche
istruzione che, ad un certo punto, renda
<boolEXPR> false e che interrompa quindi le
iterazioni
è possibile che <BLOCK> non venga eseguito
nemmeno una volta (quando la prima valutazione
di <boolEXPR> è false)
5
Iterazione WHILE (esempi)
La stampa è:
Esempio 1:
1
int x=1;
2
while(x <= 10){
3
System.out.println(x);
5
x++;
}
4
6
x++ è in questo caso l’istruzione che
permette ad un certo punto di uscire dal
ciclo while. Se non esistesse il numero
delle iterazioni sarebbe infinito perché la
condizione (x<=10) sarebbe sempre true
7
8
9
10
6
Iterazione WHILE (esempi)
La stampa è:
Esempio 2:
10
int x=10;
9
while(x > 0){
8
System.out.println(x);
x--;
}
7
6
5
4
3
2
1
7
Iterazione WHILE (esempi)
Esempio 3:
int num=1;
int somma=0;
while(num <= 5){
somma=somma+num;
Questo codice esegue la
somma degli interi da 1 a 5
1+2+3+4+5 15
num++;
}
System.out.println(somma);
La stampa è: 15
8
Iterazione WHILE (esempi)
Esempio 4:
int num=6;
int somma=0;
while(num <= 5){
somma=somma+num;
num++;
La condizione (num<=5) è
false in quanto num è
inizializzata a 6. In tale
caso il blocco di codice del
ciclo while non viene
mai eseguito e quindi il
contenuto della variabile
somma rimane 0
(valore di inizializzazione)
}
System.out.println(somma);
La stampa è: 0
9
Iterazione DO-WHILE
Il costrutto di iterazione do-while permette di eseguire
ripetutamente un blocco di istruzioni
do{
<BLOCK>;
} while(<boolEXPR>);
<instruction_afterDOWHILE>;
...
dove <boolEXPR> è l’espressione booleana che valutata decide di
reiterare o meno l’esecuzione del blocco di istruzioni definito da
<BLOCK>. Ogni volta che tutte le istruzioni di <BLOCK> vengono
eseguite, si valuta nuovamente <boolEXPR> e si decide se
rieseguire <BLOCK>. Non appena la valutazione di <boolEXPR>
restituisce false, <BLOCK> viene saltato, il controllo diventa
sequenziale e viene eseguita l’istruzione successiva
10
<instruction_afterDOWHILE>.
Iterazione DO-WHILE
Quindi:
<boolEXPR> determina la terminazione delle
iterazioni e quindi l’uscita dal ciclo do-while
all’interno di <BLOCK> ci deve essere qualche
istruzione che, ad un certo punto, renda
<boolEXPR> false e che interrompa quindi le
iterazioni
<BLOCK> è eseguito almeno una volta in quanto
la prima volta viene eseguito <BLOCK> e solo
successivamente viene valutata <boolEXPR>
11
Iterazione DO-WHILE (esempi)
Esempio 1:
int num=1;
int somma=0;
do{
somma=somma+num;
Questo codice esegue la
somma degli interi da 1 a 5
1+2+3+4+5 15
num++;
}while(num <= 5);
System.out.println(somma);
La stampa è: 15
12
Iterazione DO-WHILE (esempi)
Esempio 2:
int num=6;
int somma=0;
do{
somma=somma+num;
L’istruzione somma=somma+num
viene eseguita solo una
volta e quindi il contenuto della
variabile somma al momento
della stampa a video è 6.
num++;
}while(num <= 5);
System.out.println(somma);
La stampa è: 6
13
Iterazione FOR
Il costrutto di iterazione for permette di eseguire
ripetutamente un blocco di istruzioni
for(<init>; <boolEXPR>; <update>){
<BLOCK>;
}
<instruction_afterFOR>;
...
dove <boolEXPR> è l’espressione booleana che valutata decide di
reiterare o meno l’esecuzione del blocco di istruzioni definito da
<BLOCK>. <init> è l’istruzione che viene eseguita una sola volta
all’inizio (istruzione di inizializzazione) e <update> (istruzione di
aggiornamento) è l’istruzione che viene eseguita al termine di
ogni iterazione del blocco <BLOCK> e appena prima di rivalutare
14
<boolEXPR>.
Iterazione FOR
Il ciclo for funziona nel modo seguente:
1. viene eseguita <init>
2. viene valutata <boolEXPR>:
a) se <boolEXPR> è true viene eseguito <BLOCK>
b) se <boolEXPR> è false si esce dal ciclo for, il
controllo ridiventa sequenziale e viene eseguita
l’istruzione <instruction_afterFOR >
3. al termine dell’esecuzione di <BLOCK> (punto 2a),
viene eseguita l’istruzione <update>
4. viene rivalutata <boolEXPR> e si ritorna al punto 2
15
Iterazione FOR
Quindi:
<boolEXPR> determina la terminazione delle
iterazioni e quindi l’uscita dal ciclo for
è l’istruzione <update> che, ad un certo
punto, rende <boolEXPR> false e che
interrompe quindi le iterazioni
è possibile che <BLOCK> non venga eseguito
nemmeno una volta (quando la prima valutazione di
<boolEXPR> è false)
16
Iterazione FOR (esempi)
La stampa è:
Esempio 1:
1
int x;
2
for(x=1; x <= 10; x++){
3
System.out.println(x);
4
5
}
x=1 è l’istruzione
di inizializzazione
x++ è in questo caso
l’istruzione di aggiornamento
che permette ad un certo
punto di uscire dal ciclo for
6
7
8
9
10
17
Iterazione FOR (esempi)
La stampa è:
Esempio 2:
10
int x;
9
for(x=10; x > 0; x--){
System.out.println(x);
}
8
7
6
5
4
3
2
1
18
Iterazione FOR (esempi)
Esempio 3:
int num;
int somma;
for(num=1; num <= 5; num++){
somma=somma+num;
}
System.out.println(somma);
Questo codice esegue la
somma degli interi da 1 a 5
1+2+3+4+5 15
La stampa è: 15
19