Parte 4
Elementi di Informatica di base
Dott.ssa Elisa Tiezzi
Elementi di informatica di base
1
Controllo del flusso
• Flusso di esecuzione: ordine in cui le istruzioni di un
programma sono eseguite
• Salvo contrordini, è in sequenza
• Due possibili alterazioni:
– selezione: sceglie un’azione da una lista di due o più azioni
possibili
– ripetizione: continua ad eseguire un’azione fino a quando
non si verifica una condizione di termine
Elementi di informatica di base
2
Strutture Java

•
Sequenza
Selezione
» if
» if-else
» switch
– di default

Ripetizione
» while
» do-while
» for
Elementi di informatica di base
3
Valori Booleani
• boolean: tipo di dato primitivo in Java che
può assumere valore true oppure false
• Variabili (o espressioni) il cui valore è di tipo
boolean sono chiamate variabili (o
espressioni) Booleane
– Il valore di una variabile (o espressione) Booleana è
true oppure false
Elementi di informatica di base
4
Espressioni Booleane
• Esprimono una condizione che risulta
essere vera o falsa
• Esempio (A e B sono due dati non
necessariamente dello stesso tipo):
– A è maggiore di B?
– A è uguale a B?
– A è minore di oppure uguale a B?
Elementi di informatica di base
5
Operatori di confronto
Notazione matematica
= (uguale a)
 (diverso da)
> (maggiore di)
 (maggiore di oppure uguale a)
< (minore di)
 (minore di oppure uguale a)
Java
==
!=
>
>=
<
<=
Elementi di informatica di base
Esempio
utile == 0
utile  tax
ricavi > costi
voto >= 60
pressione < max
ricavi <= costi
6
Confronto tra caratteri e stringhe
• Si può confrontare caratteri: sono infatti basati
su Unicode che definisce un ordinamento per
tutti i possibili caratteri che possono essere
usati. Dato che in Unicode, per esempio, il
carattere ‘a’ viene prima di ‘b’, si può dire che
‘a’ è minore di ‘b’.
• Non si possono usare operatori di confronto e di
uguaglianza tra stringhe.
Elementi di informatica di base
7
Confronto tra valori in virgola
mobile
• Raramente si usa l’operatore di uguaglianza tra
due valori in virgola mobile.
• Per testare l’uguaglianza di due valori in virgola
mobile si può calcolare il valore assoluto della
loro differenza e confrontare il valore così
ottenuto con un valore di tolleranza, ad esempio
0,00001.
Elementi di informatica di base
8
Operatori logici
• AND: &&
– congiunge due espressioni
– valore di ritorno true se e solo se entrambi le
espressioni sono vere
• OR: ||
– disgiunge due espressioni
– valore di ritorno false se e solo se entrambi le
espressioni sono false
• Valutazione della seconda espressione
condizionata
Elementi di informatica di base
– per avere valutazione
completa, usare & e |
9
Altri operatori logici
• NOT: !
– nega un’espressione
– valore di ritorno true se e solo se
l’espressione è falsa
• XOR: ^
– disgiunge due espressioni in modo esclusivo
– valore di ritorno true se e solo se le due
espressioni hanno diversi valori di ritorno
Elementi di informatica
di base
– esprimibile mediante
AND,
OR e NOT
10
Precedenze e associatività
Operatori
Associatività
Tipo
++ -
Unario postfisso
++ -- + - !

Unario
(type)

Conversione
*/%

Moltiplicativo
+
Additivo
< <= > >=

Relazionale
= = !=

Uguaglianza
&

AND
^

XOR
|

OR
&&

AND
||

OR
= += -= *= /= %= &=Elementi
|= ^= di informatica

di base assegnazione
11
Esempio
•
score < min/2 – 10 || score > 90
•
score < (min/2) – 10 || score > 90
•
score < ((min/2) – 10) || score > 90
•
(score < ((min/2) – 10)) || (score > 90)
•
((score < ((min/2) – 10)) || (score > 90))
Elementi di informatica di base
12
Blocchi di istruzioni
• Insiemi di istruzioni racchiuse tra parentesi
graffe
– corrispondono ad un’azione
– parentesi non necessarie se include una sola
istruzione
• Esempio:
{ //inizio del blocco
calorieLess = 500;
calorieAllotment = calorieAllotment-calorieLess;
} //fine del blocco
Elementi di informatica di base
13
Istruzione if
• Selezione semplice:
– esegue un’azione se solo se una certa condizione è verificata
• Sintassi:
if (Espressione_Booleana)
Blocco_1 //esegui solo se vera
Prossima_Istruzione; //sempre eseguita
Espressione_Booleana
true
Blocco_1
false
Prossima_Istruzione
Elementi di informatica di base
14
Esempio
• Se il peso è superiore a quello ideale allora diminuisci
il numero totale di calorie che si possono assumere di
500.
• Successivamente, imposta il numero di calorie da
assumere per colazione ad un terzo del numero totale di
calorie
• if(weight > ideal)
calorieAllotment = calorieAllotment-500;
calorieBreakfast = calorieAllotment/3;
Elementi di informatica di base
15
Istruzione if-else
• Selezione doppia:
– esegue un’azione oppure un’altra in base al valore di
una condizione
• Sintassi:
if (Espressione_Booleana)
Blocco_1 //esegui solo se vera
else
Blocco_2 //esegui solo se falsa
Prossima_Istruzione; //sempre eseguita
Elementi di informatica di base
16
Diagramma di flusso
Espressione_Booleana
true
Blocco_1
false
Blocco_2
Prossima_Istruzione
Elementi di informatica di base
17
Esempi
• Esempio con una singola istruzione:
if(balance >=0)
balance=balance+(INTEREST_RATE*balance)/12;
else
balance=balance-OVERDRAWN_PENALTY;
• Esempio con un’istruzione composta:
if(balance >=0)
{
interest=(INTEREST_RATE*balance)/12;
balance=balance+interest;
}
else
{
interst=OVERDRAWN_PENALTY;
balance=balance-interest;
}
Elementi di informatica di base
18
Istruzioni if-else annidate
• Annidamento di istruzioni if-else:
– tratta situazioni con più di due possibilità
– Attenzione : ogni else si riferisce all’if più vicino
• Sintassi:
if (Espressione_Booleana_1)
Blocco_1
else if (Espressione_Booleana_2)
Blocco_2
.
else if (Espressione_Booleana_ n)
Blocco_n
else
Blocco_Default
Elementi di informatica di base
19
Esempio
if (score >= 90)
grade = ‘A’;
else if (score >= 80)
grade = ‘B’;
else if (score >= 70)
grade = ‘C’;
else if (score >= 60)
grade = ‘D’;
else
grade = ‘E’;Elementi di informatica di base
20
Istruzione switch
• Selezione multipla
• Sintassi:
switch(Espressione_Di_Controllo)
{
case Etichetta_Caso_1:
Sequenza_Istruzioni_1
break;
case Etichetta_Caso_2:
Sequenza_Istruzioni_2
break;
...
}
default:
Sequenza_Istruzioni_Default
Elementi di informatica di base
21
• Espressione_Di_Controllo deve essere
char, int, short o byte
• Espressione_Di_Controllo e le varie
Etichette_Caso_* devono essere dello stesso tipo
• L’istruzione break, che può essere omessa, fa,
passare il controllo alla prima istruzione dopo
l’istruzione switch
– se break non è inclusa, allora l’esecuzione procede con le
istruzioni del caso successivo
Elementi di informatica di base
22
Diagramma di flusso
Espressione_Di_Controllo = Etichetta_Caso_1
true
Sequenza_Istruzioni_1
false
break?
true
false
Espressione_Di_Controllo = Etichetta_Caso_2
true
Sequenza_Istruzioni_2
false
break?
...
false
true
default?
false
true
...
Sequenza_Istruzioni_Default
Elementi di informatica di base
23
Esempio
switch (seatLocationCode)
{
case 1:
type=‘O’;
price = 40.00;
break;
case 2:
type=‘M’;
price = 30.00;
break;
case 3:
case 4:
type=‘B’;
price = 15.00;
break;
default:
type=‘U’;
}
Elementi di informatica di base
24
L’operatore condizionale
• È l’unico operatore ternario di Java
• Sintassi:
– (Espressione Booleana)?
Espressione_1:Espressione_2;
• Il valore di ritorno è quello di Espressione_1 se
Espressione Booleana è vera, altrimenti è
quello di Espressione_2
Elementi di informatica di base
25
Esempio
• max = (n1>n2)?n1:n2;
• Equivale a:
if (n1>n2)
max = n1;
else
max = n2;
Elementi di informatica di base
26
Ripetizione: i cicli
• Struttura:
– corpo del ciclo
– condizione di terminazione del ciclo
• Organizzazione logica
– cicli controllati da condizioni
– cicli controllati da contatori
• Istruzioni Java per realizzare cicli
– while
– do-while
– for
Elementi di informatica di base
27
Ciclo while
• Sintassi:
while (Espressione_Booleana)
Blocco //corpo del ciclo
Prossima_Istruzione
• Espressione_Booleana rappresenta la
condizione di ripetizione del ciclo
– si esce dal ciclo, quando è falsa
• Blocco rappresenta il corpo del ciclo
• Istruzioni di inizializzazione precedono
generalmente il ciclo
Elementi di informatica di base
28
Diagramma di flusso
Espressione_Booleana
true
Blocco
false
Prossima_Istruzione
Elementi di informatica di base
29
Esempio
• Ciclo che calcola la somma dei primi 10 numeri
interi
int total = 0;
int count = 1;
while (count <= 10)
{
total = total + count;
count++;
}
Elementi di informatica di base
30
Minimo numero di iterazioni
• Il numero minimo di iterazioni di un ciclo while
è 0 dato che la condizione di ingresso può essere
immediatamente falsa
• Esempio:
int next;
int total = 0;
next = (int)(Math.random()*100)-50;
while (next >= 0)
{
total = total + next;
next = (int)(Math.random()*100)-50;
}
Elementi di informatica di base
31
Ciclo do-while
• Sintassi:
do
Blocco //corpo del ciclo
while (Espressione_Booleana);
Prossima_Istruzione
• Il corpo del ciclo è eseguito almeno una volta dato
che la condizione di ripetizione è posta dopo il
corpo stesso
Elementi di informatica di base
32
Diagramma di flusso
Blocco
true
Espressione_Booleana
false
Prossima_Istruzione
Elementi di informatica di base
33
Esempio
int next;
int total = 0;
do
{
next = (int)(Math.random()*100)-50;
total = total + next;
}
while (next >= 0);
Elementi di informatica di base
34
Cicli infiniti
• Cause principali:
– errata espressione Booleana
– errata (o assente) alterazione delle variabili coinvolte
nell’espressione Booleana
• Esempio:
int total = 0;
int count = 1;
while (count != 10)
{
total = total + count;
count += 2; Elementi di informatica di base
}
35
Ciclo for
• Struttura:
–
–
–
–
azione di inizializzazione
condizione di ripetizione
corpo del ciclo
azione di continuazione
• Sintassi:
for (Inizializzazione;
Espressione_Booleana;
Continuazione)
Blocco
Prossima_Istruzione
Elementi di informatica di base
36
Diagramma di flusso
Inizializzazione
Espressione_Booleana
true
false
Blocco
Continuazione
Prossima_Istruzione
Elementi di informatica di base
37
Esempio
• Sommare separatamente i numeri pari e quelli
dispari compresi tra 1 e 100
int sumEven = 0, sumOdd = 0;
for (int count = 1; count <= 99; count+=2)
{
sumOdd = sumOdd + count;
sumEven = sumEven + count + 1;
}
Elementi di informatica di base
38
Considerazioni pratiche
• Errori comuni:
– cicli infiniti (non intenzionali)
– cicli con contatore che non eseguono il numero di
iterazioni desiderato (scarto di uno).
• Testare soprattutto la condizione di ripetizione di
un ciclo per evitare possibili errori
• Mantenere traccia dei valori delle variabili
(facendo uso di stampe su video)
Elementi di informatica di base
39
Questioni di stile
• Blocchi:
{
Sequenza_Istruzioni
}
– inserire le parentesi graffe anche se il blocco è
costituito da una sola istruzione
– indentare tutte le istruzioni incluse nella
sequenza
Elementi di informatica di base
40
• Istruzione if:
if (Espressione_Booleana)
Blocco
• Istruzione if-else:
if (Espressione_Booleana)
Blocco else
Blocco
Elementi di informatica di base
41
• Istruzione switch:
switch (Espressione_Di_Controllo)
{
case Etichetta_1:
Sequenza_Istruzioni_1
case Etichetta_2:
Sequenza_Istruzioni_2
...
case Etichetta_n:
Sequenza_Istruzioni_n
default:
Sequenza_Istruzioni_Default
}
Elementi di informatica di base
42
• Istruzione while:
while (Espressione_Booleana)
Blocco
• Istruzione do-while:
do
Blocco while (Espressione_Booleana);
• Istruzione for:
for (Inizializzazione ; EB; Continuazione)
Blocco
Elementi di informatica di base
43
Scarica

Blocco