5 - Istruzioni condizionali

Documenti analoghi
6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fondamenti di Informatica T-1

Laboratorio di Informatica I

18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr.

1. Esempi. 2. I mattoni di un programma Java: ! Parole riservate. ! Identificatori. ! Variabili. ! Letterali. ! Costanti. ! Operatori. !

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Riassunto. Introduzione alla. 4. Intro programmazione strutturata. Oggi. programmazione strutturata. Le strutture di controllo della.

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double

Istruzioni di selezione in Java 1

18 - Classi parzialmente definite: Classi Astratte e Interfacce

17 - Classi parzialmente definite: Classi Astratte e Interfacce

14 - Metodi e Costruttori

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

4 - Tipi di dato primitivi

Fondamenti di Informatica T-1

Istruzioni Condizionali

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

Le basi del linguaggio Java

Fondamenti di Informatica T-1

Fondamenti di Informatica T-1. Selezione

Istruzioni Condizionali

Lezione 3 programmazione in Java

Strutture di controllo decisionali

Corso di Fondamenti di Informatica

Lezione 6 Introduzione al C++ Mauro Piccolo

Scelte ed alternative

Switch. Unità 3. Domenico Daniele Bloisi. Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER

Laboratorio di Programmazione Ottobre. Simone Zaccaria

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Laboratorio di Matematica e Informatica 1

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Istruzione if/else. Espressioni booleane

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

Istruzioni di controllo. Walter Didimo

Corso di Laurea in Informatica Applicata Prima Prova di Verifica Intermedia di Programmazione II 1 Dicembre 2010

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

Oggi. La programmazione strutturata - II. Riassunto (1/2) Riassunto (2/2) Sequenza e selezione. if e while. Stefano Mizzaro 1

Esempi di programmi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa E01. A. Miola Settembre 2007

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

Fondamenti di Informatica 1. Prof. B.Buttarazzi A.A. 2010/2011

Costrutto switch. Come utilizzare il costrutto switch

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

C espressioni condizionali

ISTRUZIONI ISTRUZIONI SEMPLICI

Programmazione. Selezione e ripetizione. Francesco Tiezzi. Scuola di Scienze e Tecnologie Sezione di Informatica Università di Camerino

Laboratorio Progettazione Web Il linguaggio PHP Le Istruzioni. Andrea Marchetti IIT-CNR AA 2015/2016

Struttura di un linguaggio

Corso di Informatica

Programmazione Procedurale in Linguaggio C++

Programmazione in Java (I modulo) Lezione 5: Più dettagli su Input e Output La classe String L'istruzione while

Laboratorio di Matematica e Informatica 1

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

Fondamenti di Informatica T-1

Lezione 4 Casting, stringhe e caratteri, operatori relazionali, espressioni e variabili booleane

Esecuzione condizionale. Esecuzione condizionale. Costrutto if. Costrutto if

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Ing. Lorenzo Vismara

Qualsiasi programma in C++ segue lo schema:

Note ed esercizi aggiuntivi

System.out.print("\tATTENZIONE: hi inserito un valore non valido!\n");

Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java

Costrutti iterativi. Utilizzo dei costrutti iterativi

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Costrutto if. Come utilizzare il costrutto condizionale if

STRUTTURE DI CONTROLLO IN C. Docente: Giorgio Giacinto AA 2009/2010

PROGRAMMAZIONE: La selezione

10 - Programmare con gli Array

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate

public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;

Preparazione allo scritto di Programmazione Comunicazione Digitale / Informatica - A.A. 2012/2013

Costrutti di Programmazione Strutturata. Informatica 1 / 22

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Gocce di Java. Gocce di Java. Selezione e ripetizione. Pierluigi Crescenzi. Università degli Studi di Firenze

Fondamenti di Programmazione. Strutture di controllo

Transcript:

5 - Istruzioni condizionali Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea Magistrale in Informatica Umanistica A.A. 2013/2014 Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 1 / 29

Sommario 1 Istruzioni condizionali 2 Espressioni booleane 3 Il comando Switch 4 Errori tipici Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 2 / 29

Istruzioni condizionali (1) In un programma spesso c e bisogno di scegliere tra operazioni diverse Per questo esiste l istruzione condizionale if-else Un esempio: import java. util. Scanner ; public class Saldo { public static void main ( String [] args ) { Scanner input = new Scanner ( System. in ); double saldo ; // chiedo il saldo del conto corrente System. out. println (" Inserisci il saldo del tuo conto "); saldo = input. nextdouble (); if ( saldo >=0) // se il saldo e positivo System. out. println ("Il saldo e positivo!"); else // altrimenti System. out. println ("Il saldo e negativo!"); System. out. println (" Grazie per aver usato il nostro servizio "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 3 / 29

Istruzioni condizionali (2) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 4 / 29

Istruzioni condizionali (3) Un istruzione condizionale if-else ha questa forma: dove: if (...condizione...)...comando... else...comando... La condizione è detta anche guardia dell if La guardia può essere vera (true) o falsa (false) I due comandi alternativi sono detti anche rami Il ramo else è opzionale (vedremo) Esempi di guardie semplici : le espressioni di confronto x==10 (la variabile x è uguale a 10) ATTENZ. ==, non = x!=10 (la variabile x è diverso da 10) x<y (la variabile x è minore della variabile y) (x/2)<=10 (l espressione x/2 è minore o uguale a 10) x>(10/y) (la variabile x è maggiore di 10/y) (x/2)>=(2+y) (l espressione x/2 è maggiore o uguale all espress. 2+y) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 5 / 29

Istruzioni condizionali (4) Se in un ramo c e più di una istruzione ci vuole un blocco Sequenza di comandi racchiusi tra parentesi graffe {... if ( saldo >=0) { System. out. println (" Saldo positivo "); double interesseattivo = saldo * tassoattivo ; saldo = saldo + interesseattivo ; else { System. out. println (" Saldo negativo "); double interessepassivo = saldo * tassopassivo ; saldo = saldo - interessepassivo ; System. out. print (" Nuovo saldo : "); System. out. println ( saldo ); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 6 / 29

Istruzioni condizionali (5) I comandi if-else possono essere annidati Si può inserire un if-else in un ramo di un altro if-else if ( saldo >=0) if ( saldo >0) System. out. println (" Saldo positivo!"); else System. out. println (" Saldo zero!"); else System. out. println (" Saldo negativo!"); Note: non servono le parentesi perchè if-else è un unico comando ATTENZIONE: ogni else fa riferimento all if a lui più vicino L uso attento di spazi e a capo nel programma (indentazione) semplifica la lettura e la comprensione del codice Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 7 / 29

Istruzioni condizionali (6) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 8 / 29

Istruzioni condizionali (7) Un caso particolare di if-else annidati sono gli if-else concatenati il ramo else è costituito da un altro if la guardia del secondo if considera un caso alternativo a quello considerato dalla guardia del primo if if ( saldo >0) System. out. println (" Saldo positivo!"); else if ( saldo ==0) System. out. println (" Saldo zero!"); else System. out. println (" Saldo negativo!"); Notare l indentazione: Di solito si scrive else if nella stessa riga Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 9 / 29

Istruzioni condizionali (8) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 10 / 29

Istruzioni condizionali (9) Il ramo else è opzionale if ( saldo >=0) System. out. println (" Saldo positivo!"); System. out. println (" Grazie per aver usato il nostro servizio "); Ma quando si annida un if in un if-else bisogna fare attenzione possono servire le parentesi graffe... if ( saldo >=0) { if ( saldo >0) saldo = saldo + interesse ; else saldo = saldo - penale ; In quale caso la penale viene applicata se togliamo le parentesi graffe? Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 11 / 29

Esempio d uso Per controllare valori ricevuti in input dall utente import java. util. Scanner ; public class Divisione { public static void main ( String [] args ) { Scanner input = new Scanner ( System. in ); int num1, num2 ; System. out. println (" Inserisci due numeri interi :"); num1 = input. nextint (); num2 = input. nextint (); // controlla che num2 sia diverso da zero // prima di calcolare num1 / num2 if ( num2 ==0) { System. out. println (" ERRORE : divisione per zero "); else { System. out. print (" Quoziente : "); System. out. println ( num1 / num2 ); System. out. print (" Resto : "); System. out. println ( num1 % num2 ); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 12 / 29

Sommario 1 Istruzioni condizionali 2 Espressioni booleane 3 Il comando Switch 4 Errori tipici Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 13 / 29

Guardie complesse (1) Abbiamo visto che possiamo esprimere la guardia di un comando if tramite delle semplici espressioni di confronto: saldo>0, x==y, ecc... E se dobbiamo esprimere condizioni più complesse? Esempio: Scrivere un programma che chiede all utente di inserire due numeri interi (ore e minuti) e stampa "E un orario" se le due cifre rappresentano un orario corretto, oppure stampa "Non e un orario" altrimenti. Input: 15 27 Output: E un orario Input: 37 97 Output: Non e un orario Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 14 / 29

Guardie complesse (2) Primo modo: if concatenati import java. util. Scanner ; public class Orario { public static void main ( String [] args ) { Scanner input = new Scanner ( System. in ); int ore, minuti ; System. out. println (" Inserire ore e minuti :"); ore = input. nextint (); minuti = input. nextint (); if (ore <0) System. out. println (" Non e un orario "); else if ( ore >23) System. out. println (" Non e un orario "); else if ( minuti <0) System. out. println (" Non e un orario "); else if ( minuti >59) System. out. println (" Non e un orario "); else System. out. println ("E un orario "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 15 / 29

Guardie complesse (3) Secondo modo: operatore logico (OR) Combina condizioni delle quali almeno una deve essere vera if ( ( ore <0) ( ore >23) ( minuti <0) ( minuti >59) ) System. out. println (" Non e un orario "); else System. out. println ("E un orario "); Terzo modo: operatore logico && (AND) Combina condizioni che devono essere tutte vere if ( (ore >=0) && (ore <24) && ( minuti >=0) && ( minuti <60) ) System. out. println ("E un orario "); else System. out. println (" Non e un orario "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 16 / 29

Guardie complesse (4) Quarto modo: variabili di tipo boolean Memorizzano il risultato di una espressione booleana boolean ore_ok = (ore >=0) && (ore <24); boolean minuti_ok = ( minuti >=0) && ( minuti <60); if ( ore_ok && minuti_ok ) System. out. println ("E un orario "); else System. out. println (" Non e un orario "); Quinto modo: operatore logico! (NOT) Nega l espressione booleana seguente (trasforma true in false e viceversa) boolean ore_ok = (ore >=0) && (ore <24); boolean minuti_ok = ( minuti >=0) && ( minuti <60); if (! ore_ok! minuti_ok ) System. out. println (" Non e un orario "); else System. out. println ("E un orario "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 17 / 29

Espressioni booleane Riassumendo, un espressione booleana può consistere di: Letterali: true false Variabili booleane (tipo boolean): isok, trovato, x,... Confronti: x==0 num1<num2 (x%2)==0 ((lordo-netto)/lordo)<(sconto_max/lordo)... Operazioni logiche (dove eb1 e eb2 sono espressioni booleane): eb1 eb2 eb1 && eb2!eb1 Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 18 / 29

Tavole di verità Il risultato delle operazioni logiche è riassunto dalle seguenti tavole di verità A B A true A false B true true true B false true false A&&B A true A false B true true false B false false false A!A true false false true Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 19 / 29

Esempi Assumendo int i =10; boolean b1= true ; boolean b2=i <5; quali delle seguenti sono espressioni booleane sintatticamente corrette? 5 false i ==7 b2 (i >7) (b2 == true ) (i >7) (3+2)&&(7-4)!b1 (b1 && b2 ) (( i +2) >11) Tra quelle corrette, quali sono vere? Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 20 / 29

Esempio d uso (1) Un programma che controlla temperatura corporea e battito cardiaco import java. util. Scanner ; public class Salute { public static void main ( String [] args ) { Scanner input = new Scanner ( System. in ); System. out. println (" Inserisci il la temperatura corporea "); double febbre = input. nextdouble (); System. out. println (" Inserisci i battiti cardiaci al minuto "); int battito = input. nextint (); boolean febbreno, febbrebassa, febbrealta ; boolean battitook, battitoaccelerato ; febbreno = febbre <37.0; febbrebassa = ( febbre >=37)&&( febbre <38); febbrealta = febbre >=38; battitook = battito <80; battitoaccelerato = battito >=80;... continua... Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 21 / 29

Esempio d uso (2)... continua... if ( febbreno && battitook ) System. out. println (" Tutto OK"); else if (( febbrebassa && battitoaccelerato ) ( febbrealta )) System. out. println (" Stato febbrile "); else System. out. println (" Stato febbrile lieve "); In quali casi stampa "Stato febbrile lieve"? Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 22 / 29

Sommario 1 Istruzioni condizionali 2 Espressioni booleane 3 Il comando Switch 4 Errori tipici Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 23 / 29

Quanti if... In alcuni casi un comando if può diventare un po lungo da scrivere: Esempio: un programma che legge un numero e lo trasforma in un giorno import java. util. Scanner ; public class Giorno { public static void main ( String [] args ) { Scanner input = new Scanner ( System. in ); System. out. println (" Inserisci un numero [1-7] "); int giorno = input. nextint (); if ( giorno ==1) System. out. println (" Lunedi "); else if ( giorno ==2) System. out. println (" Martedi "); else if ( giorno ==3) System. out. println (" Mercoledi "); else if ( giorno ==4) System. out. println (" Giovedi "); else if ( giorno ==5) System. out. println (" Venerdi "); else if ( giorno ==6) System. out. println (" Sabato "); else if ( giorno ==7) System. out. println (" Domenica "); else System. out. println (" Numero errato "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 24 / 29

Il comando switch (1) Un if concatenato che confronta il risultato di una espressione di tipo int o char (vedremo) con un numero di letterali alternativi (ad es. 1,2,3,...) può essere sostituito da un comando switch switch ( giorno ) { case 1: System. out. println (" Lunedi "); break ; case 2: System. out. println (" Martedi "); break ; case 3: System. out. println (" Mercoledi "); break ; case 4: System. out. println (" Giovedi "); break ; case 5: System. out. println (" Venerdi "); break ; case 6: System. out. println (" Sabato "); break ; case 7: System. out. println (" Domenica "); break ; default : System. out. println (" Numero errato "); Il comando break fa saltare l esecuzione alla parentesi graffa chiusa Evita, ad esempio, che dopo aver eseguito il caso 3 venga eseguito anche il 4 Tra l etichetta case N: e il comando break ci può essere più di un comando senza bisogno di parentesi graffe aggiuntive Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 25 / 29

Il comando switch (2) Il comando switch consente di accorpare casi in maniera abbastanza semplice switch ( giorno ) { case 1: case 2: case 3: case 4: case 5: System. out. println (" Giorno lavorativo "); break ; case 6: System. out. println (" Giorno prefestivo "); break ; case 7: System. out. println (" Giorno festivo "); break ; default : System. out. println (" Numero errato "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 26 / 29

Sommario 1 Istruzioni condizionali 2 Espressioni booleane 3 Il comando Switch 4 Errori tipici Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 27 / 29

Istruzioni condizionali: errori tipici (1) Vediamo alcuni errori tipici nell uso delle istruzioni condinali: Uso dell operatore di assegnamento invece che di confronto if (x =0) System. out. println ("x vale 0"); if con comando vuoto if (x ==0); System. out. println ("x vale 0") if-else senza blocchi (parentesi graffe) if (x <=y) // manca { System. out. print (x); System. out. print ("e minore o uguale di"); System. out. println (y); // manca else // manca { System. out. print (x); System. out. print ("e maggiore di"); System. out. println (y); // manca Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 28 / 29

Istruzioni condizionali: errori tipici (2) omissione di else if (y ==0) System. out. println (" Divisione per zero non consentita "); // manca else System. out. println (x/y); omissione di break switch ( giorno ) { case 1: case 2: case 3: case 4: case 5: System. out. println (" Giorno lavorativo "); // manca break ; case 6: System. out. println (" Giorno prefestivo "); // manca break ; case 7: System. out. println (" Giorno festivo "); // manca break ; default : System. out. println (" Numero errato "); Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/2014 29 / 29