Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa...

43
Laboratorio di Informat ica 1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori

Transcript of Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa...

Page 1: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 1

Parte 4

Laboratorio di InformaticaDott.ssa Elisa TiezziDott.ssa Elisa Mori

Page 2: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 2

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

Page 3: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 3

Strutture Java

• Sequenza– di default

Selezione» if» if-else» switch

Ripetizione» while» do-while» for

Page 4: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 4

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

Page 5: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 5

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?

Page 6: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 6

Operatori di confronto

Notazione matematica Java Esempio

= (uguale a) == utile == 0 (diverso da) != utile tax> (maggiore di) > ricavi > costi (maggiore di oppure uguale a) >= voto >= 60< (minore di) < pressione < max (minore di oppure uguale a) <= ricavi <= costi

Page 7: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 7

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.

Page 8: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 8

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.

Page 9: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 9

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– per avere valutazione completa, usare & e |

Page 10: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 10

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– esprimibile mediante AND, OR e NOT

Page 11: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 11

Precedenze e associatività

Unario !

Unario++ --

assegnazione= += -= *= /= %= &= |= ^=

OR||

AND&&

OR|

XOR^

AND&

Uguaglianza= = !=

Relazionale< <= > >=

Additivo+ -

Moltiplicativo* / %

Conversione(type)

Operatori Associatività Tipo

Page 12: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 12

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))

Page 13: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 13

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 bloccocalorieLess = 500;calorieAllotment = calorieAllotment-

calorieLess;} //fine del blocco

Page 14: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 14

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_Booleanatrue

Blocco_1

false

Prossima_Istruzione

Page 15: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 15

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;

Page 16: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 16

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

Page 17: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 17

Diagramma di flusso

Espressione_Booleanatrue

Blocco_1

false

Blocco_2

Prossima_Istruzione

Page 18: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 18

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;}

Page 19: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 19

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_1else if (Espressione_Booleana_2) Blocco_2 .else if (Espressione_Booleana_ n) Blocco_nelse Blocco_Default

Page 20: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 20

Esempioif (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’;

Page 21: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 21

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}

Page 22: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 22

• 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

Page 23: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 23

Diagramma di flusso

Espressione_Di_Controllo = Etichetta_Caso_1true

Sequenza_Istruzioni_1

break?

true

break?

Espressione_Di_Controllo = Etichetta_Caso_2

false

Sequenza_Istruzioni_2

false

false

...

true

true

false

...

false

true

Sequenza_Istruzioni_Defaultdefault?

Page 24: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 24

Esempioswitch (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’;}

Page 25: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 25

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

Page 26: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 26

Esempio

• max = (n1>n2)?n1:n2;

• Equivale a:

if (n1>n2)max = n1;

elsemax = n2;

Page 27: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 27

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

Page 28: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 28

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

Page 29: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 29

trueBlocco

Diagramma di flusso

Espressione_Booleana

false

Prossima_Istruzione

Page 30: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 30

Esempio• Ciclo che calcola la somma dei primi 10 numeri

interi

int total = 0;int count = 1;while (count <= 10){ total = total + count; count++;}

Page 31: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 31

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;

}

Page 32: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 32

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

Page 33: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 33

Diagramma di flusso

Espressione_Booleana

false

Prossima_Istruzione

Blocco

true

Page 34: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 34

Esempio

int next;

int total = 0;

do

{

next = (int)(Math.random()*100)-50;

total = total + next;

}

while (next >= 0);

Page 35: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 35

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;}

Page 36: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 36

Ciclo for• Struttura:

– azione di inizializzazione– condizione di ripetizione– corpo del ciclo– azione di continuazione

• Sintassi:for (Inizializzazione; Espressione_Booleana; Continuazione) Blocco Prossima_Istruzione

Page 37: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 37

Diagramma di flusso

Inizializzazione

Continuazione

Bloccotrue

Espressione_Booleana

false

Prossima_Istruzione

Page 38: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 38

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;

}

Page 39: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 39

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)

Page 40: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 40

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

Page 41: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 41

• Istruzione if:if (Espressione_Booleana)Blocco

• Istruzione if-else:if (Espressione_Booleana)Blocco elseBlocco

Page 42: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 42

• Istruzione switch:switch (Espressione_Di_Controllo){

case Etichetta_1:Sequenza_Istruzioni_1

case Etichetta_2: Sequenza_Istruzioni_2

...case Etichetta_n:

Sequenza_Istruzioni_ndefault:

Sequenza_Istruzioni_Default}

Page 43: Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.

Laboratorio di Informatica 43

• Istruzione while:while (Espressione_Booleana)Blocco

• Istruzione do-while:do Blocco while (Espressione_Booleana);

• Istruzione for:for (Inizializzazione ; EB; Continuazione) Blocco