Impariamo a programmare in. Lezione 6

Documenti analoghi
Fondamenti di Programmazione. Strutture di controllo

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

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

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

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

Le strutture di controllo

Gestione dei compiti

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

Corso: Fondamenti di Informatica 1 (gruppo 8-9) Corsi di laurea: Area dell'informazione Questionario di autovalutazione 4

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

Le basi del linguaggio Java

PROGRAMMAZIONE: Le strutture di controllo

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

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

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

Rappresentazione degli algoritmi

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

INFORMATICA. Strutture iterative

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

5 - Istruzioni condizionali

Un esempio di if annidati

Istruzioni di ripetizione in Java 1

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

Costrutti iterativi. Utilizzo dei costrutti iterativi

Capitolo 5. Decisioni. Cay S. Horstmann Concetti di informatica e fondamenti di Java quarta edizione

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

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

Introduzione alla programmazione

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

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

CORSO DI PROGRAMMAZIONE

Le strutture di controllo in C++

Laboratorio di programmazione

Programmazione a blocchi. Algobuild Prof. Sergio Roselli

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

VBA Principali Comandi

Matlab. Istruzioni condizionali, cicli for e cicli while.

Istruzioni Condizionali in C

Le Istruzioni di Controllo

Programmazione in Java (I modulo)

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

Lezione 3 programmazione in Java

Iterazioni. L istruzione while. while (condition) istruzione

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

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

C espressioni condizionali

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

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

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

Università di Roma Tor Vergata L6-1. iterazione: struttura di controllo per ripetere più volte uno stesso comando

Corso di Fondamenti di Informatica

STRUTTURE DI CONTROLLO DEL C++

Programmazione web lato client con JavaScript. Marco Camurri 1

Costrutti condizionali e iterativi

print((math.floor(1345/10)%10); print (Math.floor(1345/100)%10); Le funzioni in JavaScript

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

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

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

Laboratorio di Programmazione Ottobre. Simone Zaccaria

Espressioni logiche. Espressioni logiche. Operatori logici. Operatori logici. Operatori logici. Espressioni Logiche e Istruzione di Test

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

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

Iterazione (introduzione)

Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Informatica/ Ing. Meccanica/ Edile/ Prof. Verdicchio/ 17/01/2014/ Foglio delle domande / VERSIONE 1

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

Strutture di controllo iterative

Lezione 5: Controllo del flusso e costrutti avanzati

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Istruzioni di Controllo. Emilio Di Giacomo e Walter Didimo

Laboratorio di Matematica e Informatica 1

Calcolare x n = x x x (n volte)

Cosa si intende con stato

Dall analisi alla codifica (1)

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione n 2. Obiettivi

Strutture di Controllo

Laboratorio di Programmazione Laurea in Bioinformatica

Fondamenti di Informatica T-1 Modulo 2

Basi della programmazione in Java. Anteprima. Uso delle variabili. Il concetto di variabile Uso delle variabili. Input da tastiera I tipi Esercizi

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Dispensa 16 Tipi riferimento e stringhe. Carla Limongelli.

Istruzioni Condizionali

Corso di Fondamenti di Informatica Classi di istruzioni 2

Algoritmi di Ricerca. Esempi di programmi Java

Esercitazione 4. Comandi iterativi for, while, do-while

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Istruzioni iterative (o cicliche)

Le basi del linguaggio Java

Introduzione agli Algoritmi

Valori Alfanumerici. Informatica di Base -- R.Gaeta 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

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

Strutture di Controllo

$QDOLVLGHOSURJUDPPDTXDGUDWR

Laboratorio di Informatica. Esercitazione su algoritmi e diagrammi di flusso

Programmazione Orientata agli Oggetti in Linguaggio Java

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Transcript:

Impariamo a programmare in

Decisioni

Gestire un conto corrente double balance = 10000; // saldo iniziale System.out.println("Quanto vuoi prelevare? ); double amount = console.nextdouble(); balance = balance amount; System.out.println("Saldo: " + balance); Il programma precedente consente di prelevare tutto il denaro che sivuole ü il saldo balance può diventare negativo balance = balance amount; ü È una situazione assai poco realistica! ü Il programma deve controllare il saldo ed agire di conseguenza, consentendo il prelievo oppure no

L enunciato if if (amount<=balance) balance = balance amount; L enunciato if si usa per realizzare una decisione ed è diviso in due parti ü una verifica ü un corpo Il corpo viene eseguito se e solo se la verifica ha successo amount<=balance balance = balance amount Si No

Un nuovo problema Proviamo ora ad emettere un messaggio d errore in caso di prelievo non consentito if (amount <= balance) balance = balance - amount; if (amount > balance) System.out.println("Conto scoperto");

Un nuovo problema Proviamo ora ad emettere un messaggio d errore in caso di prelievo non consentito if (amount <= balance) balance = balance - amount; if (amount > balance) System.out.println("Conto scoperto"); Problema: se si modifica la prima verifica, bisogna ricordarsi di modificare anche la seconda (es. viene concesso un fido sul conto, che può andare in rosso )

Un nuovo problema Proviamo ora ad emettere un messaggio d errore in caso di prelievo non consentito if (amount <= balance) balance = balance - amount; if (amount > balance) System.out.println("Conto scoperto"); Problema: se si modifica la prima verifica, bisogna ricordarsi di modificare anche la seconda (es. viene concesso un fido sul conto, che può andare in rosso ) Problema: se il corpo del primo if viene eseguito, la verifica del secondo if usa il nuovo valore di balance, introducendo un errore logico quando si preleva più della metà del saldo disponibile

La clausola else Per realizzare un alternativa, si utilizza la clausola else dell enunciato if if (amount <= balance) balance = balance - amount; else System.out.println("Conto scoperto"); Vantaggio: ora c è una sola verifica üse la verifica ha successo, viene eseguito il primo corpo dell enunciato if/else üaltrimenti, viene eseguito il secondo corpo Non è un costrutto sintattico necessario, ma è utile

La clausola else if (amount <= balance) balance = balance - amount; else System.out.println("Conto scoperto"); Si amount<=balance No balance = balance - amount; System.out.println("Conto scoperto");

Sintassi: L enunciato if if (condizione) enunciato1; if (condizione) enunciato1; else enunciato2; ü Scopo: eseguire enunciato1 se e solo se la condizione è vera; se è presente la clausola else, eseguire enunciato2 se e solo se la condizione è falsa ü Spesso il corpo di un enunciato if è costituito da più enunciati da eseguire in sequenza; racchiudendo tali enunciati tra una coppia di parentesi graffe { } si crea un blocco di enunciati, che può essere usato come corpo if (amount <= balance) { balance = balance - amount; System.out.println("Prelievo accordato");}

Confrontare Valori

Confrontare Valori Le condizioni dell enunciato if sono molto spesso dei confronti tra due valori if (x >= 0) Gli operatori di confronto si chiamano operatori relazionali Attenzione: negli operatori costituti da due caratteri non vanno inseriti spazi intermedi > Maggiore >= Maggiore o uguale < Minore <= Minore o uguale == Uguale!= Diverso

Operatori Relazionali Fare molta attenzione alla differenza tra l operatore relazionale == e l operatore di assegnazione = a = 5; // assegna 5 ad a if (a == 5) // esegue enunciato enunciato // se a è uguale a 5

Confronto di Stringhe

Confronto di Stringhe Per confrontare stringhe si usa il metodo equals if (s1.equals(s2)) Per confrontare stringhe ignorando la differenza tra maiuscole e minuscole si usa if (s1.equalsignorecase(s2)) Non usare mai l operatore di uguaglianza per confrontare stringhe! Usare sempre equals Se si usa l operatore uguaglianza, il successo del confronto sembra essere deciso in maniera casuale, in realtà dipende da come è stata progettata la Java Virtual Machine e da come sono state costruite le due stringhe Attenzione perché NON è un errore di sintassi

Ordinamento Lessicografico Se due stringhe sono diverse, è possibile conoscere la relazione che intercorre tra loro secondo l ordinamento lessicografico, simile al comune ordinamento alfabetico Il confronto lessicografico tra stringhe si esegue con il metodo compareto if (s1.compareto(s2) < 0) Il metodo compareto restituisce un valore int ü negativo se s1 precede s2 nell ordinamento ü positivo se s1 segue s2 nell ordinamento ü zero se s1 e s2 sono identiche

Confronto Lessicografico Partendo dall inizio delle stringhe, si confrontano a due a due i caratteri in posizioni corrispondenti, finché una delle stringhe termina oppure due caratteri sono diversi ü se una stringa termina, essa precede l altra ü se terminano entrambe, sono uguali ü altrimenti, l ordinamento tra le due stringhe è uguale all ordinamento alfabetico tra i due caratteri diversi C a r t a C a s t a n o Lettere uguali r precede s Carta precede Castano

Confronto Lessicografico Il confronto lessicografico genera un ordinamento simile a quello di un comune dizionario L ordinamento tra caratteri in Java è simile all ordinamento alfabetico comune, con qualche differenza anche perché tra i caratteri non ci sono solo le lettere! Ad esempio ü i numeri precedono le lettere ü tutte le lettere maiuscole precedono tutte le lettere minuscole ü il carattere di spazio bianco precede tutti gli altri caratteri

Esercizio Scriviamo un programma che gestisca un conto bancario. L utente (unico per ora) accede al sistema inserendo il Nome, il programma dopo aver controllato il nome controllerà il pin di 5 cifre. Dopo aver effettuato tutti i controlli chiederà all utente quale cifra prelevare. Dopo aver controllato che la cifra sia prelevabile stampare a video il valore del prelievo e il saldo rimanente. Dati del problema: ü Nome: Gianmaria ü Pin: 14689 ü Saldo iniziale: 18345,74

Alternative Multiple

Sequenza di confronti Se si hanno più di due alternative, si usa una sequenza di confronti if (richter >= 8) System.out.println("Terremoto molto forte"); else if (richter >= 6) System.out.println("Terremoto forte"); else if (richter >= 4) System.out.println("Terremoto medio"); else if (richter >= 2) System.out.println("Terremoto debole ); else System.out.println("Terremoto molto debole");

Esercizio Trova l algoritmo risolutivo per una equazione di secondo grado. Per calcolare le due soluzioni bisogna prima calcolare il valore del determinante b 2-4ac. Se il determinante è nullo si segnala che le soluzioni sono coincidenti. Se il determinante è negativo segnalare che le soluzioni sono complesse.

Espressioni Booleane

Ogni espressione ha un valore Tipi di dato booleano x + 10 espressione aritmetica à valore numerico x < 10 espressione relazionale à valore booleano Un espressione relazionale ha un valore vero o falso (true o false) I valori true e false non sono numeri, ne oggetti, ne classi: appartengono ad un tipo di dati diverso, detto booleano, dal nome del matematico George Boole (1815-1864), pioniere della logica I valori booleani sono un tipo di dato fondamentale in Java, come quelli numerici

Gli operatori booleani o logici Gli operatori booleani o logici servono a svolgere operazioni su valori booleani: if (x > 10 && x < 20) // esegue se x è maggiore di 10 e minore di 20 L operatore && (and, e) combina due o più condizioni in una sola, che risulta vera se e solo se sono tutte vere. L operatore (or, oppure) combina due o più condizioni in una sola, che risulta vera se e solo se almeno una vera. L operatore! (not, non) inverte il valore di un espressione booleana

Gli operatori booleani o logici Cosa succede in questa espressione se x=15 if ((x > 10 && x < 20) x > 30)

Gli operatori booleani o logici A B A && B true true true true false false false qualsiasi false A true false! A false true CORTOCIRCUITO A B A B true qualsiasi true false true true false false false

PROBLEMA Riprendiamo un problema visto in precedenza, per il quale abbiamo individuato un algoritmo senza averlo ancora realizzato. Problema: Avendo depositato ventimila euro in un conto bancario che produce il 5% di interessi all anno, capitalizzati annualmente, quanti anni occorrono affinché il saldo del conto arrivi al doppio della cifra iniziale?

SOLUZIONE 1. All anno 0 ilsaldo 20000 2. Ripetere i passi 3 e 4 finché il saldo minore del doppio di 20000, poi passare al punto 5. 3. Aggiungere 1 al valore dell anno corrente. 4. Il nuovo saldo il valore del saldo precedente moltiplicato per 1.05 (cioè aggiungiamo il 5%). 5. Il risultato il valore dell anno corrente. L enunciato while consente la realizzazione di programmi che devono eseguire ripetutamente una serie di azioni finché è verificata una condizione

IL CICLO WHILE Inizializza balance e azzera year Aggiorna balance e incrementa year SI Saldo minore del doppio del saldo iniziale? L enunciato while realizza un ciclo: per comprendere il significato di questa espressione, utile osservare la rappresentazione del codice mediante diagrammi di flusso NO Stampa year

SOLUZIONE public class DoubleInvestment { public static void main(string[] args) { final double initialbalance = 20000; //final indica una costante, non una variabile final double rate = 5; //final indica una costante, non una variabile double balance = initialbalance; int year = 0; while (balance < 2 * initialbalance) { double interest = balance * rate / 100; balance = balance + interest; year++; } System.out.println("L'investimento iniziale di + initialbalance + raddoppia in " + year + " anni.");} }

L ENUNCIATO WHILE Sintassi while (condizione) enunciato Scopo: eseguire un enunciato finché lacondizione vera Nota: il corpo del ciclo while può essere un enunciato qualsiasi, quindi anche un blocco di enunciati

CICLI INFINITI Esistono errori logici che impediscono la terminazione di un ciclo, generando un ciclo infinito l esecuzione del programma continua Ininterrottamente. Bisogna arrestare il programma con un comando del sistema operativo, oppure addirittura riavviare il computer int year = 0; while (year < 20) { double interest = balance * rate / 100; balance = balance + interest; // qui manca year++ }

Cicli for e cicli do

CICLO for Molti cicli hanno questa forma. i = inizio; while (i < fine) { enunciati i++ } Per comodità esiste il ciclo for equivalente. for (i=inizio; i < fine; i++) { enunciati} Non necessario che l incremento sia di una sola unità, ne che sia positivo, ne che sia intero.

ENUNCIATO for Sintassi. for (inizializzazione; condizione; aggiornamento) { enunciato } Scopo: eseguire un inizializzazione, poi ripetere l esecuzione di un enunciato ed effettuare un aggiornamento finché la condizione vera. Nota: l inizializzazione può contenere la definizione di una variabile, che sarà visibile soltanto all interno del corpo del ciclo. for (int y = 1; y <= 10; y++) {. } // qui y non è più definita

CICLO do Capita spesso di dover eseguire il corpo di un ciclo almeno una volta, per poi ripeterne l esecuzione se verificata una particolare condizione. Esempio tipico: leggere un valore in ingresso, ed eventualmente rileggerlo finché non viene introdotto un valore valido.

Ciclo do Si può usare un ciclo while innaturale. Ma per comodità esiste il ciclo do // si usa un inizializzazione "ingiustificata" double rate = 0; while (rate <= 0) { System.out.println("Inserire il tasso:"); rate = console.nextdouble(); } double rate; do { System.out.println("Inserire il tasso:"); rate = console.nextdouble(); } while (rate <= 0);