Chapter 2 Primitive Types, Strongs, and Console I/O

Programmazione in Java
(I modulo)
Lezione 7
• Operatori logici
• Espressioni booleane
• Valutazione short circ
• Controllare la correttezza input
• break e continue
Il tipo boolean
• Il tipo boolean è tipo primitivo con solo due
valori : true e false.
• In memoria occupa solo un bit
• Le variabili di tipo Boolean rendono i programmi
più leggibili.
if (trovatoDiv)
Invece di
if( num % x ==0)
Variabili Booleane
• Variabili, costanti di tipo boolean hanno valori
true o false.
• Uso operatore di assegnamento =
• Assegno il risultato di una espressione booleana
boolean trovatoDiv;
trovatoDiv =( num % x ==0);
Input e Output di valori boolean
• Esempio
boolean booleanVar = false;
System.out.println(booleanVar);
System.out.println("Scrivi un valore booleano:");
Scanner tastiera= new Scanner(System.in);
booleanVar = tastiera();
System.out.println("hai scritto" + booleanVar);
Espressioni Booleane
• Il valore di una boolean expression è true
o false.
• Semplici esempi con operatori di confronto:
t1 < t2
bal <= 0
Operatori di confronto Java
Espressioni booleane
• Possono comporre espressioni booleane usando
gli operatori logici AND, OR , NOT
• (Espress_1) && (Espress_2)
• (Espress_1) || (Espress_2)
• !(Espress_1)
Operatori logici in Java
Tabella degli operatori booleani && (and), || (or) , ! (not)
Operatore di negazione
Esempio..
(a || b) && !(a && b)
Precedenza degli operatori
Regole di precedenza
In quale ordine vengono eseguite queste
operazioni?
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)
Esempio:
x = 5;
int y = 10, z = 15;
boolean b;
b
b
b
b
= (x < 5 && y > x);
=(x < 5 || y > x);
=(x > 3 || y < 10 && z == 15);
=(!(x > 3) && x != z || x + y == z);
Calcolo delle espressioni
booleane (Short-circuit)
• A volte basta calcolare solo una parte di una
espressione booleana per determinarne il valore
 Se il primo operando di una espressione con || è
true, l'espressione è true.
Esempio: <espress1> || <espress2>
 Se il primo operando di una espressione con && è
false, l'espressione è false.
Esempio: <espress1> && <espress2>
• Si chiama calcolo a short-circuit o anche lazy.
Calcolo con Short-circuit
• Il calcolo con short-circuit non solo è efficiente
ma a volte è cruciale!
• Possiamo per esempio evitare un errore di
esecuzione per divisione per 0 :
if ((num != 0) && (somma/num > 5))
• Se vogliamo forzare il calcolo completo
dobbiamo sostituire & a posto di && o| a posto
di ||.
Qualche altra nozione sui cicli...
L'istruzione break
• Termina il ciclo e porta direttamente alla istruzione
successiva al ciclo.
• Spesso è comoda, anche se può sempre essere
evitata scrivendo bene le condizioni nella
espressione booleana che controlla il ciclo..
• Esempio: un break dentro un ciclo for può
essere evitato riscrivendo il ciclo con un while
L'istruzione continue
 Termina l'iterazione corrente del ciclo e
inizia la successiva
 Si raccomanda di non utilizzarla (meglio
usare un if..else)
Il metodo exit
• A volte invece potrebbe servire una istruzione
per uscire direttamente dal programma (certi
valori delle variabili potrebbero rendere inutile
continuare l'esecuizione)
• Un programma può essere interrotto con
l'istruzione
System.exit(0).
Il metodo exit
• Esempio
if (numEsami== 0)
{
System.out.println ("Error: Dividing by zero.");
System.exit (0);
}
else
{
media= somma/ numEsami;
System.out.println ("La media dei voti ottenuti
e' :" + media);
}
Usare cicli per controllare input
Spesso si chiede di introdurre un input di un certo tipo, ma non si vuole
interrompere il programma se l'utente è "distratto"....
do {
System.out.println("\nInserisci un valore positivo: ");
val = tastiera.nextInt();
}
while ( val <= 0);
O anche :
System.out.println("\nInserisci un valore positivo: ");
val = tastiera.nextInt();
while ( val <= 0){
System.out.println("\nValore errato. Ripeti inserimento!");
val = tastiera.nextInt();
}
ESEMPIO:
Scrivere un programma che chiede all'utente di inserire 10
voti (numeri compresi tra 18 e 30 ) e ne calcola la media.
int x, voto;
int somma=0;
double media;
for(x=1; x<=10; x++){
System.out.println("\nInserisci un voto d'esame: ");
voto = tastiera.nextInt();
while ( voto<18 || voto > 30){ // condizione "contraria"
System.out.println("\nValore errato. Ripeti inserimento!");
voto = tastiera.nextInt();
}
somma = somma + voto;
}
media = (float) somma /10;
TRIANGOLI
Ricordando un po' di geometria...
• Un triangolo si dice RETTANGOLO se ha un angolo retto.
• I lati che includono l’angolo retto si dicono CATETI, mentre
l’altro lato di dice IPOTENUSA.
• Se un triangolo è rettangolo vale il:
 Teorema di Pitagora: la somma dei quadrati dei cateti è
uguale al quadrato dell’ipotenusa.
• Tre numeri interi positivi x,y,z si dice che sono una TERNA
PITAGORICA se possono essere i lati di un triangolo
rettangolo cioè se vale che
x2 + y 2 = z 2
• PROBLEMA: calcolare quanti sono i triangoli
rettangoli con lati interi ≤ 500.
• ALGORITMO: genero tutte le terne (x,y,z) tali che
0 ≤ x ≤ y ≤ z ≤ 500 e, per ciascuna, verifico che sia una
terna pitagorica cioè che x2 + y2 = z2
• Problema Opzionale: Elencare tutte le terne
pitagoriche (x,y,z) tali che 0 ≤ x ≤ y ≤ z ≤ 500.
Esercizi codice Ese07_x
• Esercizio 1: Scrivere un programma Java che calcola quanti sono i
triangoli rettangoli con lati interi ≤ 500.
Opzionale : produrre in input tutte le terne pitagoriche trovate.
• Esercizio 2: Scrivere un programma che chiede all’utente di inserire
un carattere c e un intero x , 3 ≤ x ≤ 30 , e disegna, uno sotto l’altro
i seguenti triangoli rettangoli con i cateti = x
(esempio per x=4 e c=o)
o
oo
ooo
oooo
o
oo
ooo
oooo
oooo
ooo
oo
o
oooo
ooo
oo
o
Esercizi codice Ese07_x
• Esercizio 3
Scrivere un programma Java per risolvere il seguente quesito:
Esiste un numero formato da 8 cifre che moltiplicato per un numero
primo dà come risultato un numero di 9 cifre uguali?