5 - Istruzioni condizionali
|
|
|
- Tiziano Speranza
- 9 anni fa
- Visualizzazioni
Transcript
1 5 - Istruzioni condizionali Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa 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/ / 29
2 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/ / 29
3 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/ / 29
4 Istruzioni condizionali (2) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/ / 29
5 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/ / 29
6 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/ / 29
7 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/ / 29
8 Istruzioni condizionali (6) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/ / 29
9 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/ / 29
10 Istruzioni condizionali (8) Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/ / 29
11 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/ / 29
12 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/ / 29
13 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/ / 29
14 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: Output: E un orario Input: Output: Non e un orario Paolo Milazzo (Università di Pisa) Programmazione - If-else A.A. 2013/ / 29
15 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/ / 29
16 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/ / 29
17 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/ / 29
18 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/ / 29
19 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/ / 29
20 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/ / 29
21 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/ / 29
22 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/ / 29
23 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/ / 29
24 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/ / 29
25 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/ / 29
26 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/ / 29
27 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/ / 29
28 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/ / 29
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/ / 29
6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari
7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa
9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
9 - Array 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
19 - Eccezioni. 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 Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 2 Cristian Del Fabbro Prossima lezione GIOVEDÌ 29 OTTOBRE 14:00 Input da tastiera package input; import java.io.*; public class Input { public static void main(string[]
18 - Classi parzialmente definite: Classi Astratte e Interfacce
18 - Classi parzialmente definite: Classi Astratte e Interfacce Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
14 - Metodi e Costruttori
14 - Metodi e Costruttori 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
Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche
Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono
3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
3 - Variabili 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
Le basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
Lezione 3 programmazione in Java
Lezione 3 programmazione in Java Nicola Drago [email protected] Dipartimento di Informatica Università di Verona Anteprima Help in linea La selezione Il costrutto di scelta Espressioni logiche Esercizi
Strutture di controllo decisionali
Capitolo 3 Strutture di controllo decisionali ANDREA GINI Dopo aver introdotto il concetto di variabile e di array, è giunto il momento di analizzare a fondo i restanti costrutti del linguaggio Java. Come
Lezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo [email protected] Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale
Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input
Istruzione if/else. Espressioni booleane
Istruzione if/else Espressioni booleane Espressioni booleane Possono assumere solo due valori: VERO (TRUE, per il C qualunque valore diverso da 0) FALSO (FALSE, il valore 0) Programmazione 2015/16 Introduzione
A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica
informatica Java basi del linguaggio Alberto Ferrari Informatica struttura di un programma Java /** * Classe EsempioProgramma * Un esempio di programmazione in Java * @author 4A Informatica */ public class
Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A
Matematica 13/11/2007 Teoria Compito A Domanda 1 Descrivere, eventualmente utilizzando uno schema, gli elementi funzionali di una CPU. Domanda 2 Java è un linguaggio compilato o interpretato? Motivare
Qualsiasi programma in C++ segue lo schema:
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java
Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa [email protected] 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e
Costrutti iterativi. Utilizzo dei costrutti iterativi
Costrutti iterativi Utilizzo dei costrutti iterativi Costrutti iterativi (1/3) I costrutti iterativi permettono di eseguire ripetutamente del codice Il linguaggio Java mette a disposizione tre costrutti
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
Esempio: Leggere due interi positivi e calcolarne il massimo comun divisore. MCD(12, 8) = 4 MCD(12, 6) = 6 MCD(12, 7) = 1 Sfruttando direttamente la definizione di MCD osservazione: 1 MCD(m,n) min(m,n)
Costrutto if. Come utilizzare il costrutto condizionale if
Costrutto if Come utilizzare il costrutto condizionale if Costrutto if (1/2) Il costrutto if permette di effettuare azioni diverse a seconda del valore di una certa condizione booleana. if (condizione)
PROGRAMMAZIONE: La selezione
PROGRAMMAZIONE: La selezione Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l altra, riga per
10 - Programmare con gli Array
10 - Programmare con gli Array 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
public static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;
Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i
Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
