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

Documenti analoghi
Condizionale. Laboratorio di Programmazione

Condizionale. Scelte. Il costrutto if. Il costrutto if

5 - Istruzioni condizionali

Istruzioni di selezione in Java 1

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

Istruzioni di selezione in Java 1

Programmazione in Java (I modulo) Lezione 4

Lezione 6 Introduzione al C++ Mauro Piccolo

Due osservazioni sulle variabili

Le basi del linguaggio Java

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

If a cascata, switch, operatori logici

If a cascata. If a cascata, switch, operatori logici. If a cascata. Il codice. If a cascata. If a cascata: diagramma. Alla fine esercizi

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

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Struttura di un programma Java

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

Istruzioni Condizionali

Impariamo a programmare in. Lezione 6

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

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

Istruzioni Condizionali

Istruzioni Condizionali

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Istruzioni Condizionali

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Strutture di controllo decisionali

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

Programmazione in Java (I modulo)

Istruzioni Condizionali

Come scrivere bene codice? (1 di 1)

Java Gli array. Array

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

PASCAL LA SELEZIONE: IF TRATTO DA CAMAGNI-NIKOLASSY, CORSO DI INFORMATICA, VOL. 1, HOEPLI. Informatica

Funzioni, Stack e Visibilità delle Variabili in C

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

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto

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

Java Gli array. Array

Istruzioni Condizionali

Programmazione Procedurale in Linguaggio C++

Costrutto if. Come utilizzare il costrutto condizionale if

Le decisioni. Istruzione if. if (amount <= balance) balance = balance - amount; Sintassi: if (condizione) istruzione

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

Costrutto switch. Come utilizzare il costrutto switch

INFORMATICA. Strutture condizionali

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

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

Informatica! Appunti dal laboratorio 1!

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

Fondamenti di Informatica T-1. Variabili, costanti e operazioni Selezione

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

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Istruzioni condizionali di diramazione in Fortran 90

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

Programmazione con Java

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

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

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso

Esercitazione 2. Espressioni booleane Il comando if-else

Metodi statici. Dichiarazione e chiamata di metodi statici

Realizzare classi. Cosa abbiamo fatto finora. Realizzare classi. Realizzare classi. Realizzare classi. Realizzare classi

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

Corso di Fondamenti di Informatica

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

Strutture di controllo condizionali in Matlab

Istruzione if. if (amount <= balance) balance = balance - amount; Sintassi: if (condizione) istruzione

Semantica operazionale dei linguaggi di Programmazione1

Funzioni, Stack e Visibilità delle Variabili in C

Logica per la Programmazione

Retribuzione. Esecuzione condizionale. Retribuzione. L istruzione if. Esempio: Retribuzione dei dipendenti. Retribuzione. Scenario d esempio

Il primo programma C++

Ing. Lorenzo Vismara

Laboratorio di Programmazione e Calcolo

Logica per la Programmazione

Introduzione alla programmazione C++ Argomenti. Macchina astratta C

Variabili e Parametri. Scope, Lifetime Inizializzazione

Variabili e Parametri

Costrutti iterativi. Utilizzo dei costrutti iterativi

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

Algoritmi di Ricerca. Esempi di programmi Java

Esame Laboratorio di Programmazione

Octave. Luca Abeni. Informatica Luca Abeni 1 / 21

Programmazione I - corso B a.a prof. Viviana Bono

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

Fondamenti di informatica T-1 (A K) Esercitazione 2: Linguaggio Java, basi e controllo del flusso

Le strutture di controllo

Transcript:

Scelte Costrutto condizionale Scelte, blocchi Fino ad ora il corpo dei metodi che abbiamo scritto aveva solo un modo di essere eseguito: in sequenza dalla prima istruzione all ultima In applicazioni non banali il comportamento dei metodi deve variare a seconda dei dati di input: il programma deve prendere delle decisioni in base ai dati in suo possesso Vediamo quindi come si fa ad effettuare delle scelte nei programmi 15/11/2004 Laboratorio di Programmazione - Luca Tesei 1 15/11/2004 Laboratorio di Programmazione - Luca Tesei 2 Riconsideriamo la classe Il metodo withdraw preleva dal conto una cifra qualsiasi In una applicazione reale, invece, il metodo dovrebbe controllare se la cifra richiesta è disponibile e solo in quel caso effettuare il prelievo Per far questo si può usare lo statement (enunciato) if public void withdraw(double amount) { if (amount <= balance) balance = balance amount; 15/11/2004 Laboratorio di Programmazione - Luca Tesei 3 15/11/2004 Laboratorio di Programmazione - Luca Tesei 4 In questo modo l assegnamento balance = balance amount; viene eseguito solo se la condizione tra parentesi tonde è vera. Il significato di (amount <= balance) è un valore di tipo boolean, cioè un valore nell insieme {true, false L espressione è vera (true) se il valore della variabile amount (parametro esplicito del metodo) è minore o uguale al valore della variabile istanza balance dell oggetto si cui si sta eseguendo il metodo Rappresentazione con diagramma a blocchi amount <= balance balance = balance - amount 15/11/2004 Laboratorio di Programmazione - Luca Tesei 5 15/11/2004 Laboratorio di Programmazione - Luca Tesei 6

Se la condizione risulta falsa l if non fa niente e il controllo passa al comando successivo Potremmo pensare, comunque, di avvertire in qualche modo l utente che il prelievo non è possibile Per far questo è possibile aggiungere all if un alternativa (else) che contiene un comando che viene eseguito solo se la condizione è falsa (false) 15/11/2004 Laboratorio di Programmazione - Luca Tesei 7 -else if (amount <= balance) balance = balance amount; else System.out.println( Importo Richiesto Non Disponibile ); 15/11/2004 Laboratorio di Programmazione - Luca Tesei 8 -else Rappresentazione con diagramma a blocchi La semantica dell if-else è la seguente: 1. Viene calcolato il valore dell espressione di tipo boolean fra parentesi tonde 2. Se l espressione ha valore true allora viene eseguito il comando che si trova tra l espressione e la parola riservata else. 3. Se l espressione ha valore false allora viene eseguito il comando che si trova dopo la parola riservata else 4. In ogni caso, dopo l esecuzione del comando corrispondente (caso 2 o caso 3), l esecuzione continua con l enunciato che segue amount <= balance balance = balance - amount Importo Richiesto Non Disponibile 15/11/2004 Laboratorio di Programmazione - Luca Tesei 9 15/11/2004 Laboratorio di Programmazione - Luca Tesei 10 Attenzione: errore! if (amount <= balance) balance = balance amount; if (amount > balance) System.out.println( Importo Richiesto Non Disponibile ); Errore! Non è la stessa cosa dell if-else: dopo l esecuzione del primo if il valore di balance può essere diverso e l espressione negata potrebbe diventare vera, mentre all inizio era falsa! 15/11/2004 Laboratorio di Programmazione - Luca Tesei 11 Rappresentazione con diagramma a blocchi Percorso che non esiste nell if-else amount <= balance balance = balance - amount amount > balance Importo Richiesto Non Disponibile 15/11/2004 Laboratorio di Programmazione - Luca Tesei 12

o if-else prevede che sia inserito un solo comando dopo l espressione tra parentesi e dopo la parola riservata else Invece potremmo aver bisogno di eseguire più di un comando nel ramo true e/o nel ramo false Per far questo usiamo la possibilità, offerta dal linguaggio Java, di creare blocchi di comandi Un blocco inizia con { e finisce con All interno delle parentesi graffe possono essere inseriti zero o più enunciati Un blocco può essere inserito in qualunque punto all interno del corpo di un metodo I blocchi possono essere annidati: un blocco può contenere altri blocchi che a loro volta possono contenere altri blocchi Un blocco viene visto dal compilatore come un unico enunciato 15/11/2004 Laboratorio di Programmazione - Luca Tesei 13 15/11/2004 Laboratorio di Programmazione - Luca Tesei 14 Supponiamo ad esempio che se un utente tenta di prelevare del denaro che non ha, oltre alla stampa del messaggio, venga anche decrementato il saldo di una penale costante Possiamo scrivere così: public static final double PENALE = 5.0; if (amount <= balance) { Blocco del ramo true balance = balance PENALE; Blocco del ramo false 15/11/2004 Laboratorio di Programmazione - Luca Tesei 15 15/11/2004 Laboratorio di Programmazione - Luca Tesei 16 e variabili di frame Nel blocco del ramo true dichiariamo una nuova variabile di tipo double che chiamiamo newbalance In Java, quando si apre un nuovo blocco, viene sempre aggiunto un frame nuovo nella pila di frame contenuta nell attivazione corrente Le variabili dichiarate all interno del nuovo blocco hanno scope (contesto) limitato ad esso Esse cesseranno di esistere quando l esecuzione di tutti i comandi del blocco sarà finita e, quindi, il frame verrà buttato via 15/11/2004 Laboratorio di Programmazione - Luca Tesei 17 Ricordiamoci che quando viene riferita una variabile con un certo nome all interno di un metodo la macchina astratta Java segue un metodo ben preciso per rintracciarla: 1. Cerca il nome all interno del frame in testa alla pila di frame dell attivazione corrente 2. Se lo trova allora quella è la variabile riferita 3. Se non lo trova lo cerca all interno dei frame sottostanti dal più recente a quello più in basso. 4. Se non lo trova in nessun frame la variabile non è stata dichiarata (è un errore che viene trovato dal compilatore) 15/11/2004 Laboratorio di Programmazione - Luca Tesei 18

: conflitto Il compilatore non permette, all interno della stessa attivazione, di ridefinire un nome di variabile, anche se in un blocco interno Facciamo un esempio. Supponiamo di trovarci nella seguente situazione alla chiamata del metodo withdraw su un certo oggetto creato in un main Posizione attuale 15/11/2004 Laboratorio di Programmazione - Luca Tesei 19 15/11/2004 Laboratorio di Programmazione - Luca Tesei 20 la chiamata di withdraw Primo frame (corrisponde al blocco principale del metodo) Posizione attuale // Non posso ridichiarare newbalance 15/11/2004 Laboratorio di Programmazione - Luca Tesei 21 15/11/2004 Laboratorio di Programmazione - Luca Tesei 22 Posizione attuale 15/11/2004 Laboratorio di Programmazione - Luca Tesei 23 15/11/2004 Laboratorio di Programmazione - Luca Tesei 24

L apertura di un nuovo blocco corrisponde alla crazione di un nuovo frame in testa alla pila Posizione attuale 15/11/2004 Laboratorio di Programmazione - Luca Tesei 25 15/11/2004 Laboratorio di Programmazione - Luca Tesei 26 penaltybalance 85.0 Nuovo frame per il nuovo blocco. La variabile penaltybalance nasce e muore con il nuovo blocco Posizione attuale 15/11/2004 Laboratorio di Programmazione - Luca Tesei 27 15/11/2004 Laboratorio di Programmazione - Luca Tesei 28 balance 85.0 Il frame per il nuovo blocco e la relativa variabile penaltybalance vengono buttati via Posizione attuale Blocco del ramo false chiuso 15/11/2004 Laboratorio di Programmazione - Luca Tesei 29 15/11/2004 Laboratorio di Programmazione - Luca Tesei 30

balance 85.0 Il frame per il blocco del ramo false dell if viene buttato via (non contiene variabili) alla fine del blocco Alla fine dell esecuzione del blocco principale di withdraw: viene cancellato il frame principale, ma anche tutta l attivazione creata per eseguirlo 15/11/2004 Laboratorio di Programmazione - Luca Tesei 31 15/11/2004 Laboratorio di Programmazione - Luca Tesei 32 balance 85.0 main (di nuovo in esecuzione) 15/11/2004 Laboratorio di Programmazione - Luca Tesei 33