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
Scarica

ProgrammazioneLEZ11