Fondamenti di informatica
Oggetti e Java
Luca Cabibbo
Istruzioni condizionali e blocco
Capitolo 13
febbraio 2004
1
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Introduzione alle istruzioni di controllo
Tipologie di istruzioni
 istruzioni semplici
 istruzioni strutturate o di controllo
 istruzioni composte da più istruzioni e/o condizioni
 tre categorie di istruzioni strutturate
 blocco (o istruzione composta)
 istruzione condizionale
 istruzione ripetitiva
2
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzione condizionale if-else
Scrivere un frammento di codice che calcola il minore tra due
numeri interi dati
... calcola il minore tra due numeri interi a e b ...
int minore;
// il minore tra a e b
if (a<b)
minore = a;
else
minore = b;
... il risultato è minore ...
3
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzione if-else
if ( espressione )
istruzione-parte-if
else
istruzione-parte-else



espressione è la condizione dell’if-else
 deve essere di tipo boolean
istruzione-parte-if è la parte if dell’istruzione if-else
istruzione-parte-else è la parte else dell’istruzione if-else
Semantica
 valuta il valore vespressione della condizione
 se il valore vespressione vale true, allora esegui l’istruzione parte
if
 se invece il valore vespressione vale false, allora esegui
l’istruzione parte else
4
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Diagramma di flusso per l’istruzione if-else
true
condizione
parte if
false
parte else
istruzione if-else
5
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Blocco (istruzione composta)
Scrivere un frammento di codice che calcola il minore e il
maggiore tra due numeri interi dati
... calcola il minore e il maggiore tra a e b ...
if (a > b)
minore = b;
maggiore = a;
else
minore = a;
maggiore = b;
... i risultati sono minore e maggiore ...

questo frammento di codice non è corretto
Per scrivere una sequenza di istruzioni dove è richiesta una
singola istruzione, si deve usare un blocco
 un blocco (o istruzione composta) è una sequenza di
istruzioni racchiuse tra parentesi graffe { e }
6
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Uso di blocchi
... calcola il minore e il maggiore tra a e b ...
if (a > b) {
minore =
maggiore
} else {
minore =
maggiore
}
b;
= a;
a;
= b;
... i risultati sono minore e maggiore ...
7
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Semantica e diagramma di flusso per blocco
{ istruzione1 istruzione2
... istruzionen }
Semantica
 valuta le istruzioni che compongono il blocco, una alla volta e
in sequenza, nell’ordine in cui sono scritte
istruzione1
istruzione2
istruzionen
blocco
8
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzione condizionale if
Scrivere un frammento di codice che incrementa la variabile zeri
se la variabile numero vale zero
 se numero non vale zero allora non bisogna fare niente
... se numero vale zero incrementa zeri ...
if (numero==0)
zeri++;
9
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzione if
if ( espressione )
istruzione
Semantica
 valuta la condizione
 se la condizione è vera, allora esegui l’istruzione parte if
10
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Diagramma di flusso per l’istruzione if
true
condizione
false
parte if
istruzione if
11
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzioni condizionali annidate
Calcolare il maggiore tra tre numeri interi a, b e c dati
 una prima soluzione
... calcola il maggiore tra a, b e c ...
int maggiore;
// il maggiore tra a, b e c
int maggioreTraAeB;
// il maggiore tra a e b
/* calcola il maggiore tra a e b */
if (a>b)
maggioreTraAeB = a;
else
maggioreTraAeB = b;
/* calcola il maggiore tra a, b e c,
* confrontanto c con il maggiore tra a e b */
if (maggioreTraAeB > c)
maggiore = maggioreTraAeB;
else
maggiore = c;
... il risultato è maggiore ...
12
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Istruzioni condizionali annidate
Una soluzione alternativa
... calcola il maggiore tra a, b e c ...
int maggiore;
// il maggiore tra a, b e c
if (a>b)
// il maggiore è a oppure c
if (a>c)
// il maggiore è a
maggiore = a;
else
// il maggiore è c
maggiore = c;
else
// il maggiore è b oppure c
if (b>c)
// il maggiore è b
maggiore = b;
else
// il maggiore è c
maggiore = c;
... il risultato è maggiore ...
13
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Cascata di istruzioni if-else
Cascata di istruzioni if-else
 consente di eseguire una istruzioni tra molte (N) sulla base di
alcune condizioni (N-1)
 una modalità di composizione di istruzioni condizionali
14
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Il problema del triangolo
Dati tre numeri interi a, b e c che rappresentano le lunghezze dei
lati di un triangolo, visualizza un messaggio che dice se il
triangolo è equilatero, isoscele o scaleno
 una attività preliminare – conta le coppie di lati uguali
/* calcola il numero di coppie di lati uguali */
uguali = 0;
/* confronta i lati */
if (a==b)
uguali++;
if (a==c)
uguali++;
if (b==c)
uguali++;
/* ora uguali può valere 0, 1 oppure 3 */
15
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Una cascata di istruzioni if-else
/* visualizza il messaggio:
*
"scaleno"
- se uguali vale 0
*
"isoscele"
- se uguali vale 1
*
"equilatero" - se uguali vale 3 */
if (uguali==0)
System.out.println("scaleno");
else if (uguali==1)
System.out.println("isoscele");
else
// uguali vale sicuramente 3
System.out.println("equilatero");
16
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Diagramma di flusso
true
false
condizione1
false
true
condizione2
alternativa1
alternativa2
alternativaelse
cascata di if-else
17
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Esempi
Data l’età di una persona, visualizza il “tipo” di persona
if (età<10)
System.out.println("bambino");
else if (età<18)
System.out.println("ragazzo");
else if (età<30)
System.out.println("giovane");
else // età >= 30
System.out.println("adulto");
Cascata di if-else senza l’ultima istruzione parte else
if (lati==3)
System.out.println("triangolo");
else if (lati==4)
System.out.println("quadrato");
else if (lati==5)
System.out.println("pentagono");
18
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Il problema dell’else mancante
Se è utile avere una istruzione condizionale nella parte else di
un’altra istruzione condizionale
 è meno utile e può essere fonte di errori usare una istruzione
condizionale nella parte if di un’altra istruzione condizionale
... verifica se x è a sinistra/destra
dell’intervallo [a,b] ...
if (x>=a)
// if-1
if (x>b)
// if-2
System.out.println("destra");
else
System.out.println("sinistra");

19
è sbagliato
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Il problema dell’else mancante
Una parte else appartiene all’ultima istruzione condizionale
incontrata
 l’indentazione corretta
... verifica se x è a sinistra/destra
dell’intervallo [a,b] ...
if (x>=a)
// if-1
if (x>b)
// if-2
System.out.println("destra");
else
System.out.println("sinistra");
Quale è la soluzione corretta?
20
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Uso di predicati complessi
Le condizioni delle istruzioni condizionali possono essere anche
molto complesse
 operatori relazionali e/o operatori logici
21
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Maggiore tra tre numeri
... calcola il maggiore tra a, b e c ...
int maggiore;
// il maggiore tra a, b e c
if (a>b && a>c)
// il maggiore è a
maggiore = a;
else if (b>c)
// il maggiore è b
maggiore = b;
else
// il maggiore è c
maggiore = c;
... il risultato è maggiore ...
22
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Il problema del triangolo
/* calcola il tipo del triangolo
* i cui lati sono a, b e c */
if (a==b && a==c)
System.out.println("equilatero");
else if (a==b || a==c || b==c)
System.out.println("isoscele");
else
System.out.println("scaleno");
23
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Linee guida
Linee guida per selezionare l’istruzione di controllo più adeguata a
un caso in esame
 se devono essere eseguite delle istruzioni in sequenza
 va usata una istruzione composta (blocco)
 se deve essere eseguita una istruzione al verificarsi di una
condizione, oppure non bisogna fare niente
 va usata l’istruzione condizionale if
 se deve essere eseguita una tra due istruzioni in alternativa
sulla base dell’esito di una condizione
 va usata l’istruzione condizionale if-else
 se deve essere eseguita una tra tre o più istruzioni (in
alternativa) sulla base dell’esito di più condizioni
 va usata una cascata di istruzioni if-else
 se, sulla base dell’esito di più condizioni, deve essere
eseguita una tra due o più istruzioni (in alternativa) oppure
niente
 va usata una cascata di istruzioni if-else senza parte else
finale
24
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Errori comuni
Un errore comune nell’uso dell’istruzione composta
 dimenticare di usarla
Attenzione all’istruzione vuota – composta da un punto e virgola
... se numero vale zero incrementa zeri ...
if (numero==0);
zeri++;
Scrivere le condizioni in una cascata di if-else senza tenere in
considerazione il fallimento delle condizioni precedenti
/* calcola il maggiore tra a, b e c */
if (a>b && a>c)
maggiore = a;
else if (b>a && b>c)
maggiore = b;
else if (c>a && c>b)
maggiore = c;
/* maggiore è il maggiore tra a, b e c (???) */
25
Istruzioni condizionali e blocco
Luca Cabibbo – Fondamenti di informatica: Oggetti e Java
Copyright © 2004 – The McGraw-Hill Companies srl
Scarica

Istruzioni condizionali e blocco