1 / 43

Parte 4

Parte 4. Fondamenti di Programmazione Strutture di controllo. Controllo del flusso. Flusso di esecuzione : ordine in cui le istruzioni di un programma sono eseguite Salvo contrordini, è in sequenza Due possibili alterazioni:

Download Presentation

Parte 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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

  3. Sequenza di default Strutture Java • Selezione • if • if-else • switch • Ripetizione • while • do-while • for

  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

  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?

  6. Operatori di confronto

  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.

  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.

  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 |

  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

  11. Operatori Associatività Tipo ++ --  Unario postfisso ++ -- + - !  Unario (type)  Conversione * / %  Moltiplicativo + -  Additivo < <= > >=  Relazionale = = !=  Uguaglianza &  AND ^  XOR |  OR &&  AND ||  OR = += -= *= /= %= &= |= ^=  assegnazione Precedenze e associatività

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

  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

  14. true Espressione_Booleana Blocco_1 false Prossima_Istruzione 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

  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;

  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

  17. true Blocco_1 false Blocco_2 Prossima_Istruzione Espressione_Booleana Diagramma di flusso

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

  19. Istruzioni if-elseannidate • 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

  20. 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’;

  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 }

  22. Espressione_Di_Controllodeve essere char, int, short o byte • Espressione_Di_Controlloe 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

  23. true Espressione_Di_Controllo = Etichetta_Caso_1 Sequenza_Istruzioni_1 false true break? false true Espressione_Di_Controllo = Etichetta_Caso_2 Sequenza_Istruzioni_2 false true break? ... false true ... default? Sequenza_Istruzioni_Default false Diagramma di flusso

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

  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

  26. Esempio • max = (n1>n2)?n1:n2; • Equivale a:if (n1>n2)max = n1;elsemax = n2;

  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

  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

  29. true Espressione_Booleana Blocco false Prossima_Istruzione Diagramma di flusso

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

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

  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

  33. Espressione_Booleana true false Blocco Prossima_Istruzione Diagramma di flusso

  34. Esempio int next; int total = 0; do { next = (int)(Math.random()*100)-50; total = total + next; } while (next >= 0);

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

  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

  37. Inizializzazione true Espressione_Booleana Blocco false Continuazione Prossima_Istruzione Diagramma di flusso

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

  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)

  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

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

  42. 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}

  43. Istruzione while:while (Espressione_Booleana)Blocco • Istruzione do-while:do Blocco while (Espressione_Booleana); • Istruzione for:for (Inizializzazione ; EB; Continuazione) Blocco

More Related