1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

43
1 Part Part e 4 e 4 Fondamenti di Programmazione Strutture di controllo

Transcript of 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

Page 1: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

1

PartParte 4e 4

Fondamenti di Programmazione

Strutture di controllo

Page 2: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

3

Strutture Java Sequenza

di default

Selezione» if» if-else» switch

Ripetizione» while» do-while» for

Page 4: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

6

Operatori di confronto

Notazione matematica Java Esempio

= (uguale a) == utile == 0≠ (diverso )da != utile ≠ tax> (maggior e di) > ricav >i costi≥ (maggior e dioppu re ugual )e a >= vo to>= 60< (min ored )i < pression < e max≤ (mino re d i oppure ugua le a) <= ricav <i = costi

Page 7: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

11

Precedenze e associatività

Unario++ -- + - !Unario

postfisso++ --

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

OR||AND&&OR|XOR^AND&

Uguaglianza= = !=Relazionale< <= > >=Additivo+ -

Moltiplicativo

* / %Conversione(type)

Operatori Associatività Tipo

Page 12: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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 blocco

calorieLess = 500;calorieAllotment = calorieAllotment-

calorieLess;} //fine del blocco

Page 14: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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 veraelse Blocco_2 //esegui solo se falsaProssima_Istruzione; //sempre eseguita

Page 17: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

17

Diagramma di flusso

Espressione_Booleanatrue

Blocco_1

false

Blocco_2

Prossima_Istruzione

Page 18: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

24

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

Page 25: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

26

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

Equivale a:

if (n1>n2)max = n1;

elsemax = n2;

Page 27: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

29

trueBlocco

Diagramma di flusso

Espressione_Booleana

false

Prossima_Istruzione

Page 30: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

33

Diagramma di flusso

Espressione_Booleana

false

Prossima_Istruzione

Blocco

true

Page 34: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

34

Esempio

int next;

int total = 0;

do

{

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

total = total + next;

}

while (next >= 0);

Page 35: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

37

Diagramma di flusso

Inizializzazione

Continuazione

Bloccotrue

Espressione_Booleana

false

Prossima_Istruzione

Page 38: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

41

Istruzione if:if (Espressione_Booleana)Blocco

Istruzione if-else:if (Espressione_Booleana)Blocco elseBlocco

Page 42: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

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: 1 Parte 4 Fondamenti di Programmazione Strutture di controllo.

43

Istruzione while:while (Espressione_Booleana)Blocco

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

Istruzione for:for (Inizializzazione ; EB; Continuazione)

Blocco