If a cascata, switch, boolean



Похожие документы
If a cascata. If a cascata, switch, operatori logici. If a cascata. Il codice. If a cascata. If a cascata: diagramma. Alla fine esercizi

4 3 4 = 4 x x x 10 0 aaa

Arduino: Programmazione

Introduzione al MATLAB c Parte 2

Esempi di algoritmi. Lezione III

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

= 1*2^7 + 1*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 210

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

10 - Programmare con gli Array

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Esercizi su. Funzioni

Guida all uso di Java Diagrammi ER

dall argomento argomento della malloc()

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Realizzazione di una classe con un associazione

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Algebra Booleana ed Espressioni Booleane

Laboratorio di Informatica

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

La selezione binaria

Matematica generale CTF

Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:

Codifica: dal diagramma a blocchi al linguaggio C++

I file di dati. Unità didattica D1 1

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ALGEBRA DELLE PROPOSIZIONI

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Capitolo 2. Operazione di limite

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

RICORSIVITA. Vediamo come si programma la soluzione ricorsiva al problema precedente: Poniamo S 1 =1 S 2 =1+2 S 3 =1+2+3

Algoritmi di Ricerca. Esempi di programmi Java

Uso di base delle funzioni in Microsoft Excel

Funzioni in C. Violetta Lonati

Fasi di creazione di un programma

GESTIONE INFORMATICA DEI DATI AZIENDALI

Corso di Informatica

Algebra booleana. Si dice enunciato una proposizione che può essere soltanto vera o falsa.

Il principio di induzione e i numeri naturali.

Dispense di Informatica per l ITG Valadier

Esercizi Capitolo 6 - Alberi binari di ricerca

La struttura dati ad albero binario

Spiegazione Open Interest Storico:

risulta (x) = 1 se x < 0.

Soluzione dell esercizio del 12 Febbraio 2004

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

SOMMARIO... 3 INTRODUZIONE...

I sistemi di numerazione

Comparatori. Comparatori di uguaglianza

1 Principali funzioni e loro domini

STAMPA UNIONE DI WORD

Modulo 4: Ereditarietà, interfacce e clonazione

Ammortamento di un debito

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Come modificare la propria Home Page e gli elementi correlati

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

Ricorsione. (da lucidi di Marco Benedetti)

SISTEMI DI NUMERAZIONE E CODICI


Lezione 8. La macchina universale

DAL DIAGRAMMA AL CODICE

Algebra di Boole ed Elementi di Logica

QUANTIZZAZIONE diverse fasi del processo di conversione da analogico a digitale quantizzazione

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

FISICA. Le forze. Le forze. il testo: 2011/2012 La Semplificazione dei Testi Scolastici per gli Alunni Stranieri IPSIA A.

Alessandro Pellegrini

CONCETTO DI ANNIDAMENTO

Capitolo 4 Probabilità

Matlab: Strutture di Controllo. Informatica B

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

E naturale chiedersi alcune cose sulla media campionaria x n

RETI E SOTTORETI. Copyright 2010 Marco Salatin Pagina 1

Rappresentare i nessi logici con gli insiemi

ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma

Analisi di bilancio: un modello con grafici

da 2 a 5 giocatori, dai 10 anni in su, durata 30 minuti

Introduzione alla programmazione in C

Un modello matematico di investimento ottimale

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Versione 7.0 Taglie e Colori. Negozio Facile

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

Транскрипт:

If a cascata, switch, boolean If a cascata Switch Il tipo boolean Operatori logici, valutazione pigra 1

If a cascata Consideriamo una semplice classe che deve descrivere con una stringa gli effetti di un terremoto partendo da una valutazione dello stesso secondo la scala Richter A fasce di valori numerici sono associate descrizioni sintetiche degli effetti Come facciamo a individuare agevolmente la fascia di un certo valore dato? Ci viene in aiuto una tecnica che consiste nel mettere in cascata tanti comandi if-else quante sono le fasce 2

Il codice Supponiamo di avere una variabile richter di tipo double e di restituire in r la descrizione: if (richter >= 8.0) r = "Quasi la totalità delle strutture sono cadute"; else if (richter >= 7.0) // tra 7.0 e 8.0 (8.0 non compreso) r = "Molti edifici distrutti"; else if (richter >= 6.0) // 6.0 <= richter < 7.0 r ="Molti edifici seriamente danneggiati e alcuni collassati"; else if (richter >= 4.5) // continua come sopra r = "Danni a edifici poco resistenti"; else if (richter >= 3.5) r = "Sentito da molte persone, non distruttivo"; else if (richter >= 0) r = "Generalmente non avvertito dalle persone"; else // richter < 0 r = "Magnitudo negativa non valida"; 3

If a cascata Si noti che gli if non sono in sequenza, bensì sono annidati uno dentro l altro if (condizione) comando else if (condizione) comando else... 4

If a cascata: diagramma cond1 Vero com1 Falso cond2 Falso Vero com2 comelsefinale 5

If a cascata Se arrivo a valutare cond2 significa che cond1 è risultata falsa Se arrivo ad eseguire il comando dell else finale significa che tutte le condizione sono risultate false Le condizioni sono valutate in sequenza I casi vanno individuati tenendo presente questi fatti 6

If a cascata Ad esempio se avessimo cominciato dal grado più basso, invece che dal più alto, il programma non sarebbe stato giusto: if (richter >= 0) r = Generalmente non avvertito dalle persone"; else if (richter >= 3.5) r = Sentito da molte persone, non distruttivo"; else if... Se prendiamo richter = 7.5 vediamo che la prima condizione è vera e quindi il programma stamperebbe Generalmente non avvertito dalle persone per un terremoto di grado 7.5 (e per un qualunque altro grado non negativo!) 7

switch Per un caso particolare di if a cascata esiste un costrutto apposito Si usa quando le condizioni da verificare sono tutte dei confronti di una variabile intera con delle costanti Il costrutto si chiama switch Vediamo un esempio 8

switch: il codice switch ( digit ) { // Variabile intera digit case 1: englishdigit = "One"; break; case 2: englishdigit = "Two"; break; case 3: englishdigit = "Three"; break; case 4: englishdigit = "Four"; break; case 5: englishdigit = "Five"; break; case 6: englishdigit = "Six"; break; case 7: englishdigit = "Seven"; break; case 8: englishdigit = "Eight"; break; case 9: englishdigit = "Nine"; break; default: englishdigit = "Errore"; break; } 9

switch All interno delle parentesi tonde si può mettere una variabile a valori interi Dentro al blocco si possono inserire quante righe case si vogliono. Il numero che segue case viene confrontato con la variabile e se sono uguali allora viene eseguito il codice che c è dopo i due punti fino al prossimo case o al default Il caso default è vero se tutti i casi precedenti sono risultati falsi (la variabile ha valore diverso da tutti i casi) 10

switch Attenzione! Se un certo case risulta vero allora viene eseguito il codice ad esso associato, ma anche il codice di tutti i casi restanti! Per evitare questo comportamento, che la maggior parte delle volte non è quello che si vuole, è possibile ricorrere al comando break 11

break Il comando break serve per uscire dal blocco switch, while, do o for corrente Il suo effetto è quello di buttare via il frame relativo al ciclo/switch e a far proseguire l esecuzione dal comando che lo segue break può essere usato solo all interno del blocco di uno switch oppure all interno del blocco di un ciclo (while, do, for) 12

switch Nel nostro esempio abbiamo inserito break alla fine del codice di ogni caso Ad esempio se avessimo dimenticato di metterlo nel primo caso: switch ( digit ) { case 1: englishdigit = "One"; // manca case 2: englishdigit = "Two"; break;... Se digit = 1 il vengono eseguiti gli assegnamenti del caso 1 e del caso 2 e quindi alla fine englishdigit vale Two! 13

Else sospeso E' un caso classico in cui ci può essere ambiguità: if (cond1) if (cond2) com1; else com2; //?? A quale if va associato l'else? 14

Else sospeso In Java, come in Pascal e C, la risoluzione dell ambiguità del comando condizionale viene risolta con questa convenzione: Ogni else è associato all if non associato con un else più vicino (andando a ritroso) Quindi, nell'esempio precedente l'else è associato all'if con condizione cond2, mentre il primo if è da considerarsi senza ramo else e contenente l'if-else successivo nel suo ramo true. 15

Il tipo boolean boolean è un tipo base di Java che indica due possibili valori soltanto: vero o falso Le costanti true e false sono gli unici due valori booleani Una espressione booleana è una qualunque espressione che ha come valore un boolean Es: amount <= balance 16

Metodi predicativi Essendo un tipo base, boolean può essere il valore restituito da un metodo I metodi di questo tipo si chiamano predicativi Un esempio su BankAccount:... public boolean isoverdrawn() { return balance < 0; }... Dice se il conto è in rosso (true) oppure no 17

Uso di valori booleani I valori booleani sono richiesti nelle condizioni degli if e dei cicli In queste occasioni si possono inserire espressioni booleane, chiamate di metodi predicativi o variabili booleane if (x > 0)... // Espressione booleana if (myaccount.isoverdrawn())... // Metodo boolean inrosso = myaccount.isoverdrawn(); if (inrosso)... // Variabile booleana 18

Operatori logici Finora abbiamo visto espressioni booleane semplici, cioè che usano: operatori di confronto fra valori metodi predicativi variabili booleane Tutti questi tipi di espressioni semplici possono venire combinati con gli operatori logici 19

Operatori Logici Operatore Java && &! Notazione logica o Descrizione And logico pigro And logico Or logico pigro Or logico Negazione 20

Grammatica <BoolExp> <BoolExp> T <BoolExp> T T T T && F T & F F F!<Operand> <Operand> <Operand> (<BoolExp>) <Espressioni Booleane Semplici> 21

Grammatica Ne risulta che l ordine di precedenza, da quello che lega di più a quello che lega di meno, è 1. Negazione 2. And 3. Or Associatività per And e Or a sinistra 22

Valutazione pigra Cosa significa esattamente and pigro e or pigro? La valutazione delle espressioni booleane può essere ottimizzata in questo modo: Si comincia a guardare il valore del primo operando sulla sinistra Se il valore di tutta l espressione può essere inferito da subito allora il secondo operando non viene valutato per niente (versione pigra) 23

Valutazione pigra: quando si applica L espressione <primo operando> && <secondo operando> È sicuramente falsa se il primo operando ha valore false Oppure: <primo operando> <secondo operando> È sicuramente vera se il primo operando ha valore true In questi due casi gli operatori pigri (&& e ) non valutano per niente il secondo operando 24

Valutazione pigra Naturalmente <primo operando> e <secondo operando> possono essere espressioni booleane qualsiasi (è l albero di derivazione che ci dà la struttura e l operatore più in alto ) I corrispondenti operatori non pigri (& e!) valutano sempre il secondo operando La valutazione pigra è quella maggiormente usata anche perché, oltre all ottimizzazione, permette di scrivere codice più compatto 25

Valutazione pigra: esempio Un caso in cui è utile usare la valutazione pigra può essere quello di acquisizione di input e suo successivo parsing Sappiamo che leggendo da una finestra grafica una stringa input, se l utente preme Annulla, input avrà valore null e verrà sollevata un eccezione dal metodo di parsing se proviamo a fare il parsing passando un riferimento null come stringa 26

Valutazione pigra: esempio Il seguente if usa la valutazione pigra: if (input!= null && Integer.parseInt(input) > 0) System.out.println( Hai scritto un numero positivo ); else System.out.println( O hai cancellato o hai + scritto un numero non positivo ); Se input == null allora il parsing non viene effettuato perché l && pigro assegna subito il valore false a tutta l espressione In questo modo si evita di far sollevare un eccezione a Integer.parseInt nel caso in cui l utente ha annullato 27

Esercizio Modificare il risolutore di equazioni di secondo grado in modo che se il discriminante ha valore negativo stampi un messaggio che indichi che non ci sono soluzioni reali dell equazione se il discriminante è zero stampi un messaggio che indica che ci sono due soluzioni reali coincidenti + le soluzioni se il discriminante è positivo stampi entrambe le soluzioni Aggiungere alla classe RisolutoreEquazione2Grado un metodo predicativo hassolution() che indichi se l equazione rappresentata dall oggetto ha soluzioni reali 28

Esercizio Scrivere un programma che prenda in ingresso un dato che descrive una carta da gioco con le seguenti abbreviazioni A = Asso 2...10 = punteggi delle carte J = Jack D = Donna R = Re Q = Quadri C = Cuori P = Picche F = Fiori continua 29

Esercizio cont d Il programma deve stampare la descrizione della carta a partire dal codice Esempio: Inserisci il codice: DP Donna di picche Definire la classe Card il cui costruttore prende il codice inserito e il cui metodo getdescription restituisce la stringa di descrizione 30

Esercizio Scrivere un programma che legga in input quattro stringhe e stampi quella più in alto e quella più in basso nell ordine alfabetico 31

Esercizio Un anno è bisestile se è divisibile per quattro (es. 1980) tranne nei casi in cui è divisibile per 100 (es. 1900) Tuttavia, è comunque un anno bisestile se è divisibile per 400 (es. 2000) Queste eccezioni, però, non erano in vigore prima del 15 ottobre 1582 Scrivere un programma che chieda in ingresso un anno e che calcoli se l anno è bisestile (implementare una classe Year con il metodo predicativo isleapyear() leap = bisestile in inglese) 32

Esercizio Scrivere una classe i cui oggetti hanno nello stato i dati relativi a un dipendente, alle ore (e frazioni di esse) che ha lavorato in una certa settimana e alla retribuzione per ora Gli straordinari (oltre le 40 ore settimanali) vanno pagati il 150% delle ore normali Scrivere un metodo getimportopercepito che ritorni il dovuto al dipendente 33

Esercizio Realizzare una classe che rappresenta una serratura a combinazione che ha una ruota a 26 posizioni etichettate da A a Z (alfabeto inglese) La ruota deve essere impostata tre volte e la serratura si apre se la combinazione è corretta Quando la serratura, aperta, viene richiusa si può impostare una nuova combinazione Se la ruota viene impostata più di tre volte, le ultime tre impostazioni sono quelle che determinano se aprire o meno la serratura continua 34

Esercizio cont d: interfaccia pubblica /** Un oggetto serratura con combinazione può essere impostato tre volte a una certa posizione. La serratura si apre solo se la combinazione di tre lettere data è corretta */ public class CombinationLock { /** Costruisce una serratura con una data combinazione e la chiude @param acombination la combinazione che deve essere una stringa di 3 lettere maiuscole dell'alfabeto inglese */ public CombinationLock(String acombination) { } 35

Esercizio cont d: interfaccia pubblica /** Imposta la ruota su una posizione. @param aposition una stringa di una sola lettera maiuscola */ public void setposition(string aposition) { } /** Tenta di aprire la serratura */ public void unlock() { } 36

Esercizio cont d: interfaccia pubblica /** Controlla se la serratura è aperta. @return true se la serratura è attualmente aperta */ public boolean isopen() { } /** Chiude la serratura lasciando la combinazione attuale */ public void lock() { } 37

Esercizio cont d: interfaccia pubblica /** Chiude la serratura e reimposta la combinazione Funziona solo se la serratura è davvero attualmente aperta @param acombination la stringa contenente la nuova combinazione */ public void lockandsetcombination(string acombination) { } } 38