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