Costrutti per il controllo del flusso di esecuzione

Documenti analoghi
Operatori in Java. Il Costrutto Condizionale if

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

Indice. Ordine di valutazione. Espressioni in C++ Le espressioni in C++ (CAP 4) Alberto Garfagnini e Marco Mazzocco A.A. 2014/ * 20 / 2

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

Fondamenti di Programmazione. Strutture di controllo

Il linguaggio Java Istruzioni di Controllo

Linguaggio C: Espressioni

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

Corso di Fondamenti di Informatica

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

Corso di Fondamenti di Informatica

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

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

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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

5 - Istruzioni condizionali

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

Indice. Introduzione a tool per lo sviluppo e l'esecuzione di programmi in linguaggio Java. Compilazione ed esecuzione di un programma

Programmazione ad Oggetti. Java Parte II

Riassunto. I mattoni di base di un programma Java. Oggi. Un programma complicato. Oggi. Perché è complicato? Stefano Mizzaro 1.

Le basi del linguaggio Java

If Statement. Il costrutto condizionale if ha la seguente sintassi:

Un esempio di if annidati

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Iterazioni. L istruzione while. while (condition) istruzione

Corso: Fondamenti di Informatica (Gruppo 2) a.a Corsi di laurea: Ing. Settore Informazione

Laboratorio Progettazione Web Il linguaggio PHP Lezione 6. Andrea Marchetti IIT-CNR 2011/2012

Strutture di Controllo

Istruzioni semplici e strutturate

Istruzioni di ripetizione in Java 1

Le strutture di controllo in C++

Costrutti iterativi. Utilizzo dei costrutti iterativi

Introduzione a Java. Riferimenti

Prima lezione di laboratorio. I mattoni di base di un programma Java. Comandi Unix. Riassunto. Oggi. Un programma complicato.

Strutture di controllo decisionali

Strutture di controllo iterative

Strutture di Controllo. if (<condizione>) statement; if (<condizione>) statement; Istruzioni condizionali. Istruzione condizionale if.

Fondamenti di Informatica T2 Modulo 2. Corso di Laurea in Ingegneria Informatica Anno accademico 2008/2009. Enumerativi

Indice Introduzione I fondamenti di C#

Programmazione, 5 a lezione

PROGRAMMAZIONE: Le strutture di controllo

Le basi del linguaggio Java

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

Istruzioni iterative (o cicliche)

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Prima lezione di laboratorio. I mattoni di base di un programma Java. Riassunto. Comandi Unix. Oggi. Blog & Group.

Capitolo 3 Sviluppo di Programmi Strutturati

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

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

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

Osservazioni. Osservazioni Casting. Conversioni di Tipo. Regole di Promozione. Tipi primitivi numerici

Classi Wrapper. int Integer float Float char Char byte Byte double Double. classe "wrapper"

Prefazione. Capitolo 1 Sistemi di elaborazione 1

Lezione 6 Introduzione al C++ Mauro Piccolo

PHP Lezione 4. Istruzione condizionale IF. Sintassi IF: if (condizione) { istruzioni; }

Esercizi di preparazione Prima Parte

Espressioni. Espressione = meccanismo fondamentale per esprimere computazioni in un LP importante comprenderne la semantica!

Esercizi Programmazione I

Programmazione in Java (I modulo)

Esercitazioni di Fondamenti Informatica - Modulo A 1

Le strutture di controllo

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

C espressioni condizionali

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

Indice. Prefazione. 3 Oggetti e Java 53

Capitolo 2 Introduzione alla programmazione in C

I costrutti forniti dal linguaggio si dividono in corrispondenti classi di istruzioni

STRUTTURE DI CONTROLLO DEL C++

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

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Keywords abstract default if private this boolean do implements protected throw extends null**

5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio

Fondamenti di Programmazione

Lezione 7: La Formalizzazione degli Algoritmi - Strutture di Controllo e Selettive La Programmazione Strutturata (3 p) Giovedì 21 Ottobre 2010

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

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

7. Strutture di controllo

Fondamenti di Informatica T-1 Modulo 2

Istruzioni decisionali

Istruzioni condizionali di diramazione in Fortran 90

Controllo di flusso negli script: if-then-else

Introduzione al VHDL Lezione 3

Istruzioni iterative. Istruzioni iterative

Costrutti condizionali e iterativi

Esempio: Tombola! Vogliamo progettare una applicazione che realizza il gioco della tombola Versione semplificata: un banco, un

scelta tra azioni alternative

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Corso di Laboratorio di Sistemi Operativi

Operatori di traslazione. Classe Math

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

Il Linguaggio Java. Concetti e costrutti di base

Espressioni. Espressioni. Valutazione di un espressione. Espressioni semplici

Introduzione al linguaggio C

Tipi di dato. Il concetto di tipo di dato viene introdotto per raggiungere due obiettivi:

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

Transcript:

Costrutti per il controllo del flusso di esecuzione Fondamenti di informatica L-B Laboratorio Alessandro Falchi afalchi@deis.unibo.it

Operatori (1) PRECEDENZA ASSOCIATIVITÀ OPERATORE TIPO/I DEGLI OPERANDI OPERAZIONE ESEGUITA 15 L (left). object, member object member access [ ] array, int array element access ( args ) method, arglist method invocation ++, -- variable post-increment, decrement 14 R (right) ++, -- variable pre-increment, decrement +, - number unary plus, unary minus ~ integer bitwise complement! boolean boolean NOT 13 R new class, arglist object creation ( type ) type, any cast (type conversion) 12 L *, /, % number, number multiplication, division, remainder 11 L +, - number, number addition, subtraction + string, any string concatenation 10 L << integer, integer left shift >> integer, integer right shift with sign extension >>> integer, integer right shift with zero extension 9 L <, <= number, number less than, less than or equal >, >= number, number greater than, greater than or equal instanceof reference, type type comparison

Operatori (2) PRECEDENZA ASSOCIATIVITÀ OPERATORE TIPO/I DEGLI OPERANDI OPERAZIONE ESEGUITA 8 L (left) = = primitive, primitive equal (have identical values)!= primitive, primitive not equal (have different values) = = reference, reference equal (refer to same object)!= reference, reference not equal (refer to different objects) 7 L & integer, integer bitwise AND & boolean, boolean boolean AND 6 L ^ integer, integer bitwise XOR ^ boolean, boolean boolean XOR 5 L integer, integer bitwise OR boolean, boolean boolean OR 4 L && boolean, boolean conditional AND 3 L boolean, boolean conditional OR 2 R (right)?: boolean, any conditional (ternary) operator 1 R = variable, any assignment *=, /=, %=, variable, any assignment with operation +=, -=, <<=, >>=, >>>=, &=, ^=, =

Operatori (3) > maggiore >= maggiore o uguale < minore <= minore o uguale == uguale [NB: differenza tra operandi di!= diverso tipo primitivo e riferimento] && AND logico condizionale OR logico condizionale! NOT logico [operatore unario] = assegnamento

Statement (1) STATEMENT expression compound empty labeled variable if switch while do for for/in break continue return synchronized throw try assert AZIONE side effects group statements do nothing name a statement declare a variable conditional conditional loop loop simplified loop collection iteration exit block restart loop end method critical section throw exception handle exception verify invariant SINTASSI var = expr; expr++; method( ); new Type( ); { statements } ; label : statement [final] type name [= value] [, name [= value]]...; if ( expr ) statement [ else statement] switch ( expr ) { [ case expr : statements ]... [ default: statements ] } while ( expr ) statement do statement while ( expr ); for ( init ; test ; increment ) statement for ( variable : iterable ) statement Java 5.0 ("foreach ) break [ label ] ; continue [ label ] ; return [ expr ] ; synchronized ( expr ) { statements } throw expr ; try { statements } [ catch ( type name ) { statements } ]... [ finally { statements } ] assert invariant [ : error] ; Java 1.4.

Statement (2) Uno statement è un singolo comando eseguito dall interprete Java String city; city= Bologna ; String city= Bologna ; // uno o due statement? ; // statement vuoto { // inizio compound statement stipendio=stipendio+1000; System.out.println( Aumento effettuato! ); } // fine compound statement

Costrutti di Controllo Sono istruzioni che permettono di controllare il flusso del codice, condizionando l esecuzione di uno o più statement attraverso la valutazione di un espressione Vedremo : 1. if / else 2. switch (non si considera l uso dell istruzione goto associata alle label perché è una pratica di programmazione che rende il codice poco leggibile e accresce le possibilità di errore)

Il costrutto if/else (1) Condiziona l esecuzione di uno statement (o di un compound statement) alla valutazione di un espressione if (condizione) // condizione è di tipo boolean statement1 // oppure compound statement else // la parte else è opzionale statement2 // oppure compound statement

Il costrutto if/else (2) if (level >= 5) System.out.println( Warning! ); if (a>10 && b!=0) // meglio: if ((a > 10) && (b!= 0)) c=a/b; if (accesso) // di che tipo è accesso? System.out.println( Accesso ); else System.out.println( Login errato );

Il costrutto if/else (3) if (spesa > 0) { // stili di indentazione cash = cash spesa; System.out.println( Addebito eseguito ); } else System.out.println( Bravo risparmiatore ); if (level < 5) System.out.println( Tutto ok ); // se avessi messo { e }? else { System.out.println( Inizio procedura emergenza ); level = 4; }

Il costrutto if/else (4) Annidamento di costrutti if/else if (a == b) { if (b == c) System.out.println( A è uguale a C ); else System.out.println( A non è uguale a B ); } else è riferito all if immediatamente precedente Il codice è sintatticamente corretto? Si E logicamente corretto o errato? ERRATO!

Il costrutto if/else (5) Annidamento di costrutti if/else if (a == b) { if (b == c) System.out.println( A è uguale a C ); } // qui termina lo statement eseguito se a == b è vero else { System.out.println( A non è uguale a B ); }

Il costrutto switch Selezione multipla sulla base del valore di una variabile (analogo al C) switch(expr) { // expr espressione con valore int, short, byte o char case const1: // zero o più statement break; case const2: // zero o più statement break; default: // zero o più statement }

Il costrutto switch switch(punti) { case 3: System.out.println( Vittoria ); break; // salta alla fine dello switch case 1: System.out.println( Pareggio ); break; case 0: System.out.println( Sconfitta ); } // e il break?

Il costrutto switch switch(risposta) { // di che tipo è risposta? case y : case Y : System.out.println( Inizio formattazione ); break; case n : case N : System.out.println( Formattazione non eseguita ); } switch(risposta) { // cosa cambia rispetto a prima? case y : case Y : System.out.println( Inizio formattazione ); break; default: System.out.println( Formattazione non eseguita ); }

I Costrutti Ciclici Sono istruzioni che permettono di ripetere l esecuzione di uno o più statement in relazione alla valutazione di una condizione. Java prevede tre costrutti ciclici: while do/while for

Il ciclo while (1) Sintassi: while (espressione) statement // semplice o composto Il valore boolean di espressione viene valutato prima di ogni iterazione: se espressione è true, statement viene processato e, al termine, si ritorna alla valutazione dell espressione; se espressione è false, il flusso di esecuzione prosegue a partire dal primo statement successivo al ciclo while

Il ciclo while (2) int conta=0; while (conta < 10) conta=conta+1; int celsius=30; boolean raffredda=true; while (raffredda) { // cosa succede se non metto { e }? System.out.println( Raffreddamento in corso ); celsius=celsius-2; if (celsius < 10) raffredda=false; } Quante volte sono eseguiti i due cicli?

Il ciclo while (3) Qual è l output del codice qui sotto? int lezioni_in_lab=0; while (lezioni_in_lab <= 9) { if (lezioni_in_lab < 7) System.out.println( Uff, è dura la vita ); else System.out.println( Ormai ci siamo ); lezioni_in_lab++; } System.out.println( E ora vai con l esame! );

Il ciclo do/while (1) Sintassi: do statement // semplice o composto while (espressione); // attenzione al ; Il valore boolean di espressione viene valutato dopo ogni iterazione: se espressione è true, si esegue una nuova iterazione (statement viene processato), al termine della quale si ripete la valutazione di espressione; se espressione è false, il flusso di esecuzione prosegue a partire dal primo statement successivo al ciclo while

Il ciclo do/while (2) int a=0, b=0; do { a=a+1; } while (a+b < 8); int nlezione; ATTENZIONE! do { nlezione=1; System.out.println( Sono alla lezione numero: +nlezione); nlezione = nlezione + 1; } while (nlezione <= 10); Quante volte viene eseguito ciascun ciclo?

Il ciclo for (1) Sintassi: for(init; test; update) statement // semplice o composto Rispetto ai cicli while e do/while, il ciclo for esplicita gli elementi tipici delle iterazioni, ovvero il contatore e la condizione di iterazione. init è lo statement di inizializzazione della variabile contatore test è l espressione che esprime la condizione a cui ciascuna iterazione è subordinata update è lo statement che altera il valore del contatore

Il ciclo for (2) for(int count=0 ; count < 10 ; count++) System.out.println( Eseguo l interazione + count); int count; for(count=0 ; count < 10 ; count++) System.out.println( Eseguo l interazione + count); Qual è la differenza tra i due cicli for qui sopra? Nota: così come è possibile leggere i valori delle variabili contatori dall interno del ciclo, è anche possibile alterarne il valore (accesso in scrittura) senza che l interprete Java segnali alcun errore. Fate attenzione, perché questo modo di operare, pur lecito, compromette leggibilità e correttezza logica del codice!

Il ciclo for (3) Init e update possono essere formati da più espressioni separate dalla virgola: for(int n=1, m=5 ; n < 20 ; n++, m--) { if (n > m) System.out.println(n + è più grande di + m); else System.out.println(n + è minore o uguale a + m); } Nota: init, test ed update sono parti opzionali dello statement for. Sono dunque lecite, ad esempio, le seguenti: for(int j=5 ; j < 80 ; ) for( ; x > 7 ; )

int conta=1; Alcuni casi particolari // inizializzazione comune ai tre cicli for( ; ; ) { System.out.println( Eseguita iterazione + conta); conta = conta + 1; break; } while(true) { System.out.println( Eseguita iterazione + conta); conta = conta + 1; break; } do { System.out.println( Eseguita iterazione + conta); conta = conta + 1; break; } while(true);

Esercizi Per ciascuno dei punti seguenti, scrivere un programma Java. data una vocale, scrive su standard output una parola che la contiene almeno due volte (es: a casa ) dato un numero intero, scrive i suoi 8 interi successivi [provare i tre costrutti ciclici] definita la classe Mese con i seguenti metodi getname(); // ritorna una stringa con il nome del mese getnumerogiorni(); // ritorna il numero dei giorni il programma, ricevuto un numero compreso tra 1 e 12, crea un istanza della classe Mese e ne invoca i metodi per scrivere il messaggio il mese <nome> ha <n> giorni premessa java.util.random dado = new java.util.random(); // istanzia un generatore di numeri casuali dado.nextint(6); // ritorna un intero casuale tra 0 e 5 compresi Il programma conta il numero di lanci necessari a fare un 6. Estensione: lancio di due dadi. Il programma conta il numero di lanci necessari ad un doppio 6.