If a cascata, switch, operatori logici

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

Sviluppo di programmi strutturati
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Progettazione Fase di progettazione di unapplicazione Fase di implementazione.
16/11/2004Laboratorio di Programmazione - Luca Tesei1 Espressioni booleane, confronti.
Linguaggi Regolari e Linguaggi Liberi
12/11/2004Laboratorio di Programmazione - Luca Tesei1 Caratteri – Input da Console Il tipo char Input dallo standard input.
26/10/2004Laboratorio di Programmazione - Luca Tesei1 Variabili e Oggetti Lo spazio di memoria di Java Le API di Java.
3/12/2004Laboratorio di Programmazione - Luca Tesei1 Sequenze di lunghezza variabile ArrayList Operazioni Ricerche.
5/11/2004Laboratorio di Programmazione - Luca Tesei1 Esercizi Su Progettazione e Implementazione di classi.
29/10/2004Laboratorio di Programmazione - Luca Tesei1 Metodi e variabili istanza Definizione e chiamata di metodi Uso delle variabili istanza Documentazione.
9/11/2004Laboratorio di Programmazione - Luca Tesei1 Tipi numerici di base - Costanti Interi e decimali Definizione di costanti.
22/10/2004Programmazione e Laboratorio di Programmazione – Luca Tesei1 Laboratorio – Primo Impatto Scrivere un semplice programma I primi concetti.
Programmazione e Laboratorio di Programmazione – Luca Tesei1 La Programmazione Cosè la programmazione? Concetti preliminari.
29/11/2004Laboratorio di Programmazione - Luca Tesei1 Ancora sulla progettazione/Pacchetti Concetti di coesione/accoppiamento/coerenza Uso dei package.
26/11/2004Laboratorio di Programmazione - Luca Tesei1 Input/Output Redirecting, scomposizione dellinput, uso di file.
2/11/2004Laboratorio di Programmazione - Luca Tesei1 Punto della situazione Da dove veniamo, dove andiamo.
Istruzioni condizionali e blocco
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Dipartimento di Matematica
Algoritmi e Programmazione
Classi ed Oggetti in Java (Cenni). Richiami Ruolo delle Classi in Java Oggetti.
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
9/12/2004Laboratorio di Programmazione - Luca Tesei1 Ereditarietà
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Uso dei cicli y t =c+ty t-1 +e Un uso dei cicli può essere quello di creare una serie storica per cui y t =c+ty t-1 +e dove poniamo c e t scalari ed e~N(0,1).
1 Lezione XIII Lu 17-Nov-2005 Programmare le classi.
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Programmazione Corso di laurea in Informatica
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Strutture di controllo in C -- Flow Chart --
Corso di PHP.
Programmazione in Java Claudia Raibulet
2000 Prentice Hall, Inc. All rights reserved. Capitolo 3 (Deitel) Lo sviluppo di programmi strutturati Indice degli argomenti Introduzione 3.2 -
CODIFICA Da flow-chart a C++.
11/11/2004Laboratorio di Programmazione - Luca Tesei1 Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di.
BIOINFO3 - Lezione 221 Listruzione IF-ELSE prevede un secondo blocco di istruzioni da eseguire in alternativa al primo nel caso la condizione sia falsa.
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
ISTITUTO STATALE DI ISTRUZIONE SUPERIORE F. ENRIQUES CORSO JAVA – PROVA INTERMEDIA DEL 12 MARZO 2007 NOME: COGNOME: ________________________________________________________________________________.
Anno accademico Le istruzioni di controllo in C.
15/11/2004Laboratorio di Programmazione - Luca Tesei1 Costrutto condizionale Scelte, blocchi.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Una "vera" classe.. ..un esempio pratico: la calcolatrice
Lezione 3 Struttura lessicale del linguaggio
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
La ricorsione.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Capitolo 6 Iterazione Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
Ripasso su Java. Introduzione Per risolvere problemi complessi, i linguaggi di programmazione forniscono costrutti per realizzare nuove funzioni che trasformino.
Progettare una classe 21 Febbraio La classe BankAccount Vogliamo realizzare una classe i cui oggetti sono dei semplici conti bancari. * Identifichiamo.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Forma normale delle equazioni di 2° grado Definizione. Un'equazione di secondo grado è in forma normale se si presenta nella forma Dove sono numeri.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Transcript della presentazione:

If a cascata, switch, operatori logici Alla fine esercizi 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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"; 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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) else ... 19/11/2004 Laboratorio di Programmazione - Luca Tesei

If a cascata: diagramma cond1 com1 com2 cond2 comElseFinale 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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!) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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; } 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei break Il comando break serve per uscire dal blocco di codice corrente Il suo effetto è quello di buttare via il frame relativo al blocco corrente e a far proseguire l’esecuzione dal comando che segue il blocco break può essere usato solo all’interno del blocco di uno switch oppure all’interno del blocco di un ciclo (while, do, for) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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”! 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Else sospeso Abbiamo già visto questo argomento a Programmazione Anche 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) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Operatori Logici Operatore Java Notazione logica Descrizione &&  And logico pigro & And logico ||  Or logico pigro | Or logico !  o  o ~ Negazione 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Grammatica <BoolExp>  <BoolExp> || T | <BoolExp> | T | T T  T && F | T & F | F F  !<Operand> | <Operand> <Operand>  (<BoolExp>) | | <Espressioni Booleane Semplici> 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Grammatica Ne risulta che l’ordine di precedenza, da quello che lega di più a quello che lega di meno, è Negazione And Or Associatività per And e Or a sinistra 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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  19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Esercizio Scrivere un programma che legga in input quattro stringhe e stampi quella più in alto e quella più in basso nell’ordine alfabetico 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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) 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei Esercizio Migliorare la classe BankAccount controllando: Che non ci siano mai importi negativi come parametri di deposit e withdraw Che non ci siano mai prelievi che portino ad un saldo negativo 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

Laboratorio di Programmazione - Luca Tesei 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 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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) { } 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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() { 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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() { 19/11/2004 Laboratorio di Programmazione - Luca Tesei

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) { } 19/11/2004 Laboratorio di Programmazione - Luca Tesei