Condizionale. Laboratorio di Programmazione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Condizionale. Laboratorio di Programmazione"

Transcript

1 Condizionale Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle variabili di frame nei blocchi Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals If a cascata Switch Il tipo boolean Operatori logici, valutazione pigra 1

2 Scelte 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 2

3 Il costrutto if Riconsideriamo la classe BankAccount 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 3

4 Il costrutto if public class BankAccount {... public void withdraw(double amount) { if (amount <= balance) balance = balance amount; }... } 4

5 Il costrutto if 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 5

6 Rappresentazione con diagramma a blocchi amount <= balance Falso Vero balance = balance - amount 6

7 Il costrutto if Se la condizione risulta falsa l if da solo 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) 7

8 Il costrutto if-else public class BankAccount {... public void withdraw(double amount) { if (amount <= balance) balance = balance amount; else System.out.println( Importo Richiesto Non Disponibile ); }... } 8

9 Il costrutto if-else 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 9

10 Rappresentazione con diagramma a blocchi amount <= balance Falso Vero Importo Richiesto Non Disponibile balance = balance - amount 10

11 Attenzione: errore! public class BankAccount {... public void withdraw(double amount) { 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! 11

12 Rappresentazione con diagramma a blocchi amount <= balance Falso Percorso che non esiste nell if-else Vero balance = balance - amount amount > balance Vero Falso Importo Richiesto Non Disponibile 12

13 Blocchi Il costrutto if 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 13

14 Blocchi 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 dalla macchina astratta java come un unico enunciato 14

15 Blocchi 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ì: 15

16 Blocchi public class BankAccount {... public static final double PENALE = 5.0; public void withdraw(double amount) { if (amount <= balance) { double newbalance = balance amount; balance = newbalance; } else { System.out.println( Importo Richiesto Non Disponibile ); balance = balance PENALE; System.out.println( Penale di + PENALE + euro applicata ); } }... } Blocco del ramo true Blocco del ramo false 16

17 Blocchi 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 17

18 Visibilità delle variabili e blocchi Ricordiamoci che quando viene riferita una variabile con un certo nome all interno di un metodo la macchina astratta Java segue un algoritmo ben preciso per rintracciarla: 1. Cerca il nome all interno del frame in testa alla pila di frame dell attivazione corrente 3. Se lo trova allora quella è la variabile riferita 4. Se non lo trova lo cerca all interno dei frame sottostanti dal più recente a quello più in basso. 5. Se non lo trova in nessun frame la variabile non è stata dichiarata (è un errore che viene trovato dal compilatore) 18

19 Visibilità delle variabili e blocchi: 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 19

20 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) balance = newbalance; else { System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } Posizione attuale 20

21 Visibilità delle variabili e blocchi Attivazione della chiamata di withdraw BankAccount balance 90.0 Heap amount this Attivazione del main (congelata/ non raggiungibile) Primo frame (corrisponde al blocco principale del metodo) 21

22 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) Posizione attuale balance = newbalance; else { System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // Non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } 22

23 Visibilità delle variabili e blocchi BankAccount newbalance balance 90.0 amount this Attivazione del main (congelata/ non raggiungibile) 23

24 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) balance = newbalance; else { Posizione attuale System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } 24

25 Visibilità delle variabili e blocchi BankAccount newbalance balance 90.0 amount this Attivazione del main (congelata/ non raggiungibile) L apertura di un nuovo blocco corrisponde alla crazione di un nuovo frame in testa alla pila 25

26 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) balance = newbalance; else { System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } Posizione attuale 26

27 Visibilità delle variabili e blocchi penaltybalance 85.0 BankAccount balance 90.0 Heap newbalance amount this Attivazione del main (congelata/ non raggiungibile) Nuovo frame per il nuovo blocco. La variabile penaltybalance nasce e muore con il nuovo blocco 27

28 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) balance = newbalance; else { System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } Posizione attuale 28

29 Visibilità delle variabili e blocchi BankAccount balance 85.0 newbalance amount this Attivazione del main (congelata/ non raggiungibile) Il frame per il nuovo blocco e la relativa variabile penaltybalance vengono buttati via 29

30 Visibilità delle variabili e blocchi public void withdraw(double amount) { double newbalance = balance amount; if (newbalance >= 0) balance = newbalance; else { System.out.println( Importo Richiesto Non Disponibile ); { // Nuovo Blocco // non posso ridichiarare newbalance double penaltybalance = balance PENALE; balance = penaltybalance; } // penaltybalance non esiste più! System.out.println( Penale di + PENALE + euro applicata ); } } Posizione attuale Blocco del ramo false chiuso 30

31 Visibilità delle variabili e blocchi BankAccount Heap balance 85.0 newbalance amount this Attivazione del main (congelata/ non raggiungibile) Il frame per il blocco del ramo false dell if viene buttato via (non contiene variabili) alla fine del blocco 31

32 Visibilità delle variabili e blocchi Alla fine dell esecuzione del blocco principale di withdraw: public void withdraw(double amount) { double newbalance = balance amount;... } viene cancellato il frame principale, ma anche tutta l attivazione creata per eseguirlo 32

33 Visibilità delle variabili e blocchi BankAccount Heap balance 85.0 Attivazione del main (di nuovo in esecuzione) 33

34 Operatori relazionali All interno delle parentesi tonde della condizione dell if è possibile, come abbiamo visto, inserire il confronto tra due valori poiché questa espressione ha un valore di tipo boolean (true o false) Vediamo, nella tabella seguente, tutti gli operatori relazionali che possiamo usare: 34

35 Operatori Relazionali Operatore Java > >= < <= ==!= Notazione matematica > < = Descrizione Maggiore Maggiore o uguale Minore Minore o uguale Uguale Diverso 35

36 Errore comune: = invece di == I programmatori ancora inesperti spesso confondono l uso di = con == In particolare un errore comune è quello di inserire in un confronto l operatore = invece che == if (a=5) b++; // Errore di compilazione L espressione a=5, oltre ad essere un assegnamento e non un confronto, ha un valore di tipo int 36

37 Confronti di valori in virgola mobile Gli operatori == o!= non hanno molto senso applicati a valori in virgola mobile Un errore tipico è quello di cercare di controllare se un valore double (o float) sia uguale a 0.0 È molto improbabile che un double risultante da un calcolo sia esattamente zero Potrebbe essere invece un valore prossimo allo zero 37

38 Confronti di valori in virgola mobile Prendiamo ad esempio questo semplice programma: double r = Math.sqrt(2); double d = r * r -2; if (d == 0) System.out.println("Radice quadrata di 2 per 2 meno 2 fa 0"); else System.out.println("Radice quadrata di 2 per 2 meno 2 fa " + d); Il valore stampato non è zero: d vale E-16 che è prossimo a zero, ma non è zero! 38

39 Confronti di valori in virgola mobile In generale, per confrontare l uguaglianza di due valori in virgola mobile è bene fissare una soglia EPSILON di tolleranza e vedere se i due valori sono sufficientemente prossimi rispetto a questa Per esempio si può definire final double EPSILON = 1E-14; E poi controllare se x-y EPSILON. Se è vero si può decidere che i due valori vanno considerati uguali 39

40 Confronti di valori in virgola mobile Tuttavia, se x e y sono valori molto grandi, la loro differenza potrebbe essere una quantità maggiore di EPSILON, ma comunque, vista la loro grandezza, essere irrisoria È bene, quando x e y non sono prossimi a zero, considerare la differenza dei due valori rapportata alla loro gandezza: x y ε max( x, y ) 40

41 Confronti di valori in virgola mobile In codice java: final double EPSILON = 1E-14; double x, y;... if (Math.abs(x-y) / Math.max(Math.abs(x), Math.abs(y)) <= EPSILON) System.out.println( \ Uguali\ ); else System.out.println( \ Diversi\ ); 41

42 Confronto di Stringhe Le stringhe in Java, lo sappiamo, sono oggetti Quindi il valore di una variabile di frame di tipo String non è la stringa in sé, ma un riferimento all oggetto stringa Se cercassimo di confrontare direttamente due variabili di tipo stringa staremmo semplicemente controllando se puntano allo stesso oggetto Ma in generale ciò che ci interessa è sapere se il contenuto di due stringhe (oggetti stringa diversi) è lo stesso 42

43 Confronto di Stringhe... String pippo = console.readline(); String pluto = console.readline(); if (pippo == pluto) //falso System.out.println( Stringhe Uguali ) else System.out,println( Stringhe Diverse ) Per il confronto del contenuto di due stringhe dobbiamo usare il metodo equals della classe String Come tipico della programmazione ad oggetti, un operatore binario fra due oggetti viene realizzato con un metodo che va chiamato su uno dei due e a cui va passato un riferimento all altro oggetto operando 43

44 Confronto di Stringhe System.out.println("Inserisci una stringa"); String pippo = console.readline(); System.out.println("Inserisci una seconda stringa per il confronto"); String pluto = console.readline(); if ( pippo == pluto ) System.out.println("Confronto con == : Stringhe Uguali"); else System.out.println("Confronto con == : Stringhe Diverse"); if ( pippo.equals(pluto) ) System.out.println("Confronto con metodo equals: Stringhe + Uguali"); else System.out.println("Confronto con metodo equals: Stringhe + Diverse"); Inserendo due stringhe uguali il primo confronto fallisce, mentre il secondo ha successo 44

45 Confronto di Stringhe La classe String fornisce anche operatori di confronto corrispondenti a <, > Il metodo compareto ha un parametro String in ingresso e confronta la stringa su cui è chiamato con la stringa passata come parametro Il valore di uscita è un int il cui valore indica se la stringa passata è uguale, maggiore o minore nel senso di ordine alfabetico 45

46 Confronto di Stringhe int r = string1.compareto(string2); Se r > 0 allora string1 precede string2 nell ordine alfabetico Se r < 0 allora string1 segue string2 nell ordine alfabetico Se r == 0 allora le stringhe sono uguali (alternativa a equals) 46

47 Confronto di oggetti Il discorso fatto per le stringhe si applica agli oggetti in generale Applicando l operatore == a due variabili riferimento si controlla semplicemente se puntano allo stesso oggetto Se si vuole invece confrontare lo stato si deve fornire la classe di un metodo equals simile a quello che viene fornito con String 47

48 Ridefinizione di equals Se guardiamo il codice della classe String vediamo che il metodo equals è così definito: public boolean equals(object anobject) { if (this == anobject) { return true; Sono esattamente lo stesso oggetto } if (anobject instanceof String) { String anotherstring = (String) anobject;... } Esegue il controllo carattere return false; per carattere, se le stringhe sono } uguali ritorna true, altrimenti ritorna false 48

49 Ridefinizione di equals La classe Object definisce un metodo equals che identifica due oggetti se sono lo stesso, cioè se i riferimenti puntano alla stessa area di memoria heap Ogni classe eredita questo metodo equals Ogni classe dovrebbe ridefinirlo nello stesso modo in cui viene fatto nella classe String Vediamo in dettaglio... 49

50 Ridefinizione di equals Il metodo deve prendere come parametro un generico Object: public boolean equals(object anobject) { Per prima cosa controlla se il riferimento all'oggetto passato è uguale a quello di questo oggetto Se è così sicuramente anche bisogna rispondere true (è ciò che fa equals di Object) Se non è così allora bisogna controllare il tipo dell'oggetto passato 50

51 Ridefinizione di equals L'operatore instanceof restituisce true se un riferimento generico a Object punta in realtà a un certo oggetto di una classe data: if (anobject instanceof String) { Se questo non è vero allora bisognerà rispondere false (due oggetti di classi diverse in genere non vengono identificati) Se invece è questo il caso si dovranno controllare le variabili istanza per decidere l'uguaglianza... 51

52 Ridefinizione di equals La prima cosa da fare è un casting per riottenere un riferimento alla classe vera: String anotherstring = (String) anobject; Poi si confronteranno i valori degli oggetti this e anotherstring per decidere se si considerano questi due oggetti uguali Non bisogna comunque dimenticare che anche se equals ridefinito identifica due oggetti diversi questi rimangono sempre oggetti distinti! 52

53 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 53

54 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"; 54

55 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) comando else... 55

56 If a cascata: diagramma cond1 com1 cond2 com2 comelsefinale 56

57 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 57

58 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!) 58

59 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 59

60 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; } 60

61 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) 61

62 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 62

63 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) 63

64 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! 64

65 Else sospeso Abbiamo visto questo argomento in un esempio sull'ambiguità delle grammatiche 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) 65

66 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 66

67 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 67

68 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 68

69 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 69

70 Operatori Logici Operatore Java && &! Notazione logica o Descrizione And logico pigro And logico Or logico pigro Or logico Negazione 70

71 Grammatica <BoolExp> <BoolExp> T <BoolExp> T T T T && F T & F F F!<Operand> <Operand> <Operand> (<BoolExp>) <Espressioni Booleane Semplici> 71

72 Grammatica Ne risulta che l ordine di precedenza, da quello che lega di più a quello che lega di meno, è 1. Negazione 2. And 3. Or Associatività per And e Or a sinistra 72

73 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) 73

74 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 74

75 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 75

76 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 76

77 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 77

78 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 78

79 Esercizio Scrivere un programma che prenda in ingresso un dato che descrive una carta da gioco con le seguenti abbreviazioni A = Asso = punteggi delle carte J = Jack D = Donna R = Re Q = Quadri C = Cuori P = Picche F = Fiori continua 79

80 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 80

81 Esercizio Scrivere un programma che legga in input quattro stringhe e stampi quella più in alto e quella più in basso nell ordine alfabetico 81

82 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) 82

83 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 83

84 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 84

85 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 85

86 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 acombination la combinazione che deve essere una stringa di 3 lettere maiuscole dell'alfabeto inglese */ public CombinationLock(String acombination) { } 86

87 Esercizio cont d: interfaccia pubblica /** Imposta la ruota su una aposition una stringa di una sola lettera maiuscola */ public void setposition(string aposition) { } /** Tenta di aprire la serratura */ public void unlock() { } 87

88 Esercizio cont d: interfaccia pubblica /** Controlla se la serratura è true se la serratura è attualmente aperta */ public boolean isopen() { } /** Chiude la serratura lasciando la combinazione attuale */ public void lock() { } 88

89 Esercizio cont d: interfaccia pubblica /** Chiude la serratura e reimposta la combinazione Funziona solo se la serratura è davvero attualmente acombination la stringa contenente la nuova combinazione */ public void lockandsetcombination(string acombination) { } } 89

If a cascata, switch, operatori logici

If a cascata, switch, operatori logici If a cascata, switch, operatori logici Alla fine esercizi 19/11/2004 Laboratorio di Programmazione - Luca Tesei 1 If a cascata Consideriamo una semplice classe che deve descrivere con una stringa gli effetti

Dettagli

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

If a cascata. If a cascata, switch, operatori logici. If a cascata. Il codice. If a cascata. If a cascata: diagramma. Alla fine esercizi If a cascata If a cascata, switch, operatori logici Alla fine esercizi 19/11/2004 Laboratorio di Programmazione - Luca Tesei 1 Consideriamo una semplice classe che deve descrivere con una stringa gli effetti

Dettagli

Condizionale. Scelte. Il costrutto if. Il costrutto if

Condizionale. Scelte. Il costrutto if. Il costrutto if Condizionale Scelte Comando Condizionale Blocchi Gestione dei blocchi da parte della macchina astratta Java Visibilità (scope) ed esistenza delle variabili di frame nei blocchi Operatori Relazionali, confronti

Dettagli

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

Scelte. Costrutto condizionale. Il costrutto if. Il costrutto if. Rappresentazione con diagramma a blocchi. Il costrutto if 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

Dettagli

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei Confronti, equals Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals 1 Operatori relazionali All interno delle parentesi tonde della condizione dell if è possibile, come abbiamo

Dettagli

If a cascata, switch, boolean

If a cascata, switch, boolean If a cascata, switch, boolean If a cascata Switch Il tipo boolean Operatori logici, valutazione pigra 1 If a cascata Consideriamo una semplice classe che deve descrivere con una stringa gli effetti di

Dettagli

Istruzioni di selezione in Java 1

Istruzioni di selezione in Java 1 Ordine di esecuzione Istruzioni di selezione in Java Corso di laurea in Comunicazione digitale Nei metodi l ordine di esecuzione delle istruzioni è sequenziale se non specificato altrimenti Alcune istruzioni

Dettagli

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

Cast implicito. Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto. byte short int long float double Il cast Cast implicito Il cast è fatto automaticamente quando un tipo più basso viene assegnato ad un tipo più alto Per esempio: byte short int long float double int x = 10; float f; f = x; Il valore di

Dettagli

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

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 3: Istruzioni ed operatori booleani. Vittorio Scarano Corso di Laurea in Informatica Università di Salerno Soluzioni agli esercizi Istruzioni (statement) semplici e di controllo

Dettagli

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

Programmazione A.A Costrutti di base. ( Lezione XII, parte I ) Gestione dell input. Prof. Giovanni Gallo Dr. Programmazione A.A. 2002-03 I Costrutti di base ( Lezione XII, parte I ) Gestione dell input Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di Catania e-mail

Dettagli

Impariamo a programmare in. Lezione 6

Impariamo a programmare in. Lezione 6 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

Dettagli

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane

Informatica AA 2005/06. Programmazione M.A. Alberti. Operatori in Java 1. Operatori in Java. Espressioni aritmetiche. Espressioni booleane Operatori in Java Operatori in Java Corso di laurea in Informatica Operatori aritmetici Operatori di uguaglianza e relazionali Operatori logici in espressioni booleane La precedenza degli operatori L associatività

Dettagli

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

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER

Dettagli

Le basi del linguaggio Java

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

Dettagli

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

Unità Didattica 2 Linguaggio C. Espressioni, Operatori e Strutture linguistiche per il controllo del flusso Unità Didattica 2 Linguaggio C Espressioni, Operatori e Strutture linguistiche per il controllo del flusso 1 Espressioni e assegnazioni Le espressioni sono definite dalla grammatica: espressione = variabile

Dettagli

Lezione 6 Introduzione al C++ Mauro Piccolo

Lezione 6 Introduzione al C++ Mauro Piccolo Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,

Dettagli

Operazioni numeriche - Input

Operazioni numeriche - Input Operazioni numeriche - Input Espressioni, funzioni matematiche, classi involucro, Acquisizione di input 11/11/2004 Laboratorio di Programmazione - Luca Tesei 1 Operazioni fra interi e decimali In Java

Dettagli

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 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

Dettagli

Esecuzione condizionale. Esecuzione condizionale. Costrutto if. Costrutto if

Esecuzione condizionale. Esecuzione condizionale. Costrutto if. Costrutto if Esecuzione condizionale Esecuzione condizionale Permette l esecuzione di un blocco di codice solo se si verifica una certa condizione SE (condizione è vera) ALLORA esegui istruzioni 2 er. 2.4 also condizione

Dettagli

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Dettagli

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

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Istruzioni Condizionali Corso di Programmazione e Metodi Numerici Ingegneria Aerospaziale BAER Domenico Daniele Bloisi Docenti Metodi Numerici prof. Vittoria Bruni vittoria.bruni@sbai.uniroma1.it Programmazione

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

Dettagli

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

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Primo esempio di un programma Java Semplicissimo programma

Dettagli

Programmazione in Java (I modulo) Lezione 4

Programmazione in Java (I modulo) Lezione 4 Programmazione in Java (I modulo) Lezione 4 Costanti Chiamiamo costanti tutti i valori numerici (interi o con la virgola), i caratteri e le stringhe. Esempio: 2, 3.7, 'y, buongiorno Le costanti numeriche

Dettagli

Strutture di controllo decisionali

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

Dettagli

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

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura: Le classi in java Un semplice programma java, formato da una sola classe, assume la seguente struttura: class Domanda static void main(string args[]) System.out.println( Quanti anni hai? ); La classe dichiarata

Dettagli

Istruzioni di controllo

Istruzioni di controllo Istruzioni di controllo Le istruzioni in C Assegnazione Sequenza I/O Test Cicli Controllo = che cosa è la prossima cosa da fare La prossima cosa da fare è quella che segue La prossima cosa da fare dipende

Dettagli

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

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

Dettagli

5 - Istruzioni condizionali

5 - Istruzioni condizionali 5 - Istruzioni condizionali 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

Dettagli

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max

Espressioni booleane. Esempio: temperatura <= 0 velocita > velocita max Espressioni booleane Espressioni booleane il linguaggio deve consentire di descrivere espressioni booleane cioé espressioni che ritornino come risultato valori di verit : vero o falso (guardie di condizionali

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione 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

Dettagli

Java SE 7. Strutture di programmazione (2)

Java SE 7. Strutture di programmazione (2) Java SE 7 Strutture di programmazione (2) diegozabot@yahoo.it ursula.castaldo@gmail.com Casting (1) E' l'operazione che realizza la conversione di tipo tra oggetti e tra tipi primitivi. E' un'operazione

Dettagli

Valutazione di espressioni

Valutazione di espressioni Valutazione di espressioni Stefano Ferrari Università degli Studi di Milano stefano.ferrari@unimi.it Programmazione anno accademico 2016 2017 Blocco Blocco è un insieme di istruzioni consecutive, con un

Dettagli

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

STRUTTURE DI CONTROLLO DEL C++

STRUTTURE DI CONTROLLO DEL C++ STRUTTURE DI CONTROLLO DEL C++ Le istruzioni if e else Le istruzioni condizionali ci consentono di far eseguire in modo selettivo una singola riga di codice o una serie di righe di codice (che viene detto

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

C espressioni condizionali

C espressioni condizionali C espressioni condizionali Esiste un particolare operatore, detto operatore condizionale, che rappresenta un istruzione if else. estremamente compattata?: Supponiamo di voler inserire nella variabile intera

Dettagli

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

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

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI IF Ogni linguaggio di programmazione presenta almeno una struttura di controllo decisionale. La sintassi del linguaggio C è la seguente. if ()

Dettagli

Esercitazione 2. Espressioni booleane Il comando if-else

Esercitazione 2. Espressioni booleane Il comando if-else Esercitazione 2 Espressioni booleane Il comando if- Espressioni booleane L espressione (i==100) è un espressione booleana. La sua valutazione può restituire solo uno dei due valori booleani true = 1 (in

Dettagli

Confrontare valori 1

Confrontare valori 1 Confrontare valori 1 Confrontare valori Le condizioni dell enunciato if sono molto spesso dei confronti tra due valori if (x >= 0) y = x; Gli operatori di confronto si chiamano operatori relazionali >

Dettagli

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 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

Dettagli

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

IL LINGUAGGIO JAVA. Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per scrivere frasi ben formate Fondamenti di Informatica IL LINGUAGGIO JAVA Sintassi, Semantica, Input, Tipi Elementari e Istruzione Condizionale 1 Introduzione alla sintassi di Java La sintassi formalizza le regole sintattiche per

Dettagli

Strutture di controllo condizionali in Matlab

Strutture di controllo condizionali in Matlab Strutture di controllo condizionali in Matlab Informatica B Le strutture condizionali A cosa servono le strutture condizionali? %Inserimento dei parametri della parabola: y=ax^2+bx+c a = input( inserire

Dettagli

INFORMATICA. Strutture condizionali

INFORMATICA. Strutture condizionali INFORMATICA Strutture condizionali Strutture condizionali Sono le istruzioni che rappresentano il ben noto costrutto IF THEN ELSE della programmazione strutturata. In C, come peraltro in tutti gli altri

Dettagli

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

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin Linguaggio C strutture di controllo: strutture iterative Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Strutture iterative

Dettagli

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

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore Programma del corso Introduzione agli algoritmi Rappresentazione delle Informazioni Architettura del calcolatore Reti di Calcolatori Elementi di Programmazione Algoritmi e programmi Algoritmo Sequenza

Dettagli

Istruzioni Condizionali

Istruzioni Condizionali Istruzioni Condizionali Corso di Ingegneria Clinica BCLR Domenico Daniele Bloisi Docente Ing. Domenico Daniele Bloisi, PhD Ricercatore Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio

Dettagli

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1

Il linguaggio C. Prof. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1 Il linguaggio C I linguaggi di programmazione ad alto livello sono linguaggi formali ( sintassi e semantica formalmente definite) però sono compatti e comprensibili. Le tipologie di linguaggi sono: procedurali

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi Per la costruzione di un programma conviene: 1. condurre un analisi del problema da risolvere 2. elaborare un algoritmo della soluzione rappresentato in un linguaggio adatto alla

Dettagli

Programmazione web lato client con JavaScript. Marco Camurri 1

Programmazione web lato client con JavaScript. Marco Camurri 1 Programmazione web lato client con JavaScript Marco Camurri 1 JavaScript E' un LINGUAGGIO DI PROGRAMMAZIONE che consente di inserire codice in una pagina web Sintassi simile a Java (e al C), ma NON E'

Dettagli

Un esempio di if annidati

Un esempio di if annidati Programmazione A.A. 2002-03 I Costrutti di base ( Lezione XIV, parte I ) Costrutto di selezione switch Prof. Giovanni Gallo Dr. Gianluca Cincotti Dipartimento di Matematica e Informatica Università di

Dettagli

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito.

Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Corso di Linguaggi e Traduttori Anno Accademico 2017 2018 Prof. Giovanni Pighizzini Progetto d esame Scopo del progetto è la costruzione di un compilatore per il linguaggio descritto qui di seguito. Variabili

Dettagli

Sviluppo di programmi

Sviluppo di programmi Sviluppo di programmi FASE 1: Dare un nome al problema partendo dall analisi del problema FASE 2: Scrivere la specifica funzionale FASE 3: Scrittura dell algoritmo FASE 3.1: Introduzione delle variabili

Dettagli

Elementi di Informatica A. A. 2016/2017

Elementi di Informatica A. A. 2016/2017 Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 1

Dettagli

Costrutto switch. Come utilizzare il costrutto switch

Costrutto switch. Come utilizzare il costrutto switch Costrutto switch Come utilizzare il costrutto switch Costrutto switch (1/4) Il costrutto if-else permette di selezionare le istruzioni da eseguire tra due alternative, a seconda del valore di una condizione

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Qualsiasi programma in C++ segue lo schema:

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

Dettagli

Ing. Lorenzo Vismara

Ing. Lorenzo Vismara Ing. Lorenzo Vismara ! "# #!$#%&# '(!)&!*)&#*$# +!, +$-.(( #!((%&#, #!& %&) /$#01&&#2! 0#( 3452 $ 6#( 1 2 &## #!7 #89): #;##( 1? )#&)< $9): #@82 #)AA)#&#&$( #7)&#7& @B && ##@A&#C 7 $C#&7 @B A&#)@#7&#

Dettagli

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

L oggetto creato. Creazione di Oggetti. Rectangle: il concetto 10. Costruzione. Lo spazio di memoria del linguaggio Java. Rectangle: l oggetto Usare e costruire oggetti Variabili e Oggetti Lo spazio di memoria di Java Le API di Java Gli oggetti sono entità di un programma che si possono manipolare invocando i metodi System.out oggetto della classe

Dettagli

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

Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout

Dettagli

Fasi di creazione di un programma

Fasi di creazione di un programma Fasi di creazione di un programma 1. Studio Preliminare 2. Analisi del Sistema 6. Manutenzione e Test 3. Progettazione 5. Implementazione 4. Sviluppo Sviluppo di programmi Per la costruzione di un programma

Dettagli

Laboratorio di Programmazione Lezione 2. Cristian Del Fabbro

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[]

Dettagli

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei

Input. Il tipo char Alcune modalità di acquisizione di input. Laboratorio di Programmazione - Luca Tesei Input Il tipo char Alcune modalità di acquisizione di input 1 Lettura di dati in input Vediamo due modi per acquisire dei dati di input dall utente: 1. Tramite una finestra grafica di dialogo 2. Tramite

Dettagli

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 Fondamenti di informatica T-1 (A K) Esercitazione 2 Basi del linguaggio Java AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Programma Introduzione al calcolatore e Java Linguaggio Java, basi e

Dettagli

Struttura di un linguaggio

Struttura di un linguaggio Il C nel C++ Struttura di un linguaggio Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

IL COSTRUTTO SELEZIONE

IL COSTRUTTO SELEZIONE IL COSTRUTTO SELEZIONE Il costrutto selezione Permette di effettuare una scelta tra due possibili opzioni. Tale scelta verrà effettuata valutando il valore di verità di una condizione espressa da una proposizione

Dettagli

Metodi statci. Dichiarazione e chiamata di metodi statci

Metodi statci. Dichiarazione e chiamata di metodi statci Metodi statci Dichiarazione e chiamata di metodi statci Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

Programmazione ad oggetti

Programmazione ad oggetti Programmazione ad oggetti OOP La programmazione orientata agli oggetti (Object Oriented Programming) ha l obiettivo di formalizzare gli oggetti del mondo reale e di costruire con questi un mondo virtuale.

Dettagli

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

1. Esempi. 2. I mattoni di un programma Java: ! Parole riservate. ! Identificatori. ! Variabili. ! Letterali. ! Costanti. ! Operatori. ! ntroduzione alla Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@uniud.it Programmazione, lezione 4 1. Esempi Riassunto 2. mattoni

Dettagli

Strutture di Controllo

Strutture di Controllo Strutture di Controllo Fondamenti di Informatica Effettuare una scelta in un programma Istruzioni condizionali #include int main() char c; printf("inserire il carattere maiuscolo: "); scanf("%c",

Dettagli

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico:

Il C nel C++ Struttura di un linguaggio. Elementi lessicali. Spazi. Livello lessicale: Livello sintattico: Livello semantico: Struttura di un linguaggio Il C nel C++ Livello lessicale: regole per la definizione i simboli Livello sintattico: regole per la composizione dei simboli Livello semantico: significato delle strutture

Dettagli

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.

In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni

Dettagli

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso

Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso Fondamenti di informatica T-1 (A K) Esercitazione 4: controllo del flusso AA 2018/2019 Tutor: Lorenzo Rosa lorenzo.rosa@unibo.it 2 Esercitazione 4 Introduzione al calcolatore e Java Linguaggio Java, basi

Dettagli

Metodi statici. Dichiarazione e chiamata di metodi statici

Metodi statici. Dichiarazione e chiamata di metodi statici Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

8 Introduzione MATLAB

8 Introduzione MATLAB 8.1 Basi Per pulire il workspace (eliminare tutte le variabili esistenti): 1 clear Per pulire la finestra dei comandi (command window): 1 clc In MATLAB non è necessario dichiarare le variabili ed esse

Dettagli

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

Riassunto. Introduzione alla. 4. Intro programmazione strutturata. Oggi. programmazione strutturata. Le strutture di controllo della. ntroduzione alla Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ mizzaro@dimi.uniud.it Programmazione, lezione 4 Riassunto Esempi mattoni

Dettagli

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

Programmazione I - corso B a.a prof. Viviana Bono Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 2009-10 prof. Viviana Bono Blocco 12 Riepilogo e complementi sui tipi Ripasso del sistema di tipi

Dettagli

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso.

C array. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso. Problema: scrivere un programma che, ricevuto in input un intero n ed n interi positivi, li stampi in ordine inverso. Non sappiamo a priori quante variabili dobbiamo definire per contenere gli interi.

Dettagli

Programmazione in Python. Moreno Marzolla

Programmazione in Python. Moreno Marzolla Programmazione in Python Moreno Marzolla http://www.moreno.marzolla.name/ Copyright 2011, Moreno Marzolla (http://www.moreno.marzolla.name/teaching/labinf2011/) This work is licensed under the Creative

Dettagli

Linguaggio C: Espressioni

Linguaggio C: Espressioni Linguaggio C: Espressioni Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna http://www.moreno.marzolla.name/ 2 Ringraziamenti prof. Mirko Viroli, Università

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Istruzioni Condizionali in C

Istruzioni Condizionali in C Concetti chiave Istruzioni Condizionali in C Tipi di Istruzioni Condizionali Espressioni Blocchi d istruzioni Istruzioni Condizionali: if-else Istruzioni Condizionali: switch-case Istruzione break Istruzioni

Dettagli

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona

Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Corso di Laurea in Bioinformatica Dipartimento di Informatica - Università di Verona Sommario tipi di dati condizioni cicli cicli annidati per alcuni tipi di dati Java mette a disposizione una rappresentazione

Dettagli

PROGRAMMAZIONE: La selezione

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

Dettagli

Esame Laboratorio di Programmazione

Esame Laboratorio di Programmazione Esame Laboratorio di Programmazione 20 Giugno 2014 NOA Non è possibile usare le classi del package prog.io del libro di testo L obiettivo è scrivere una applicazione che permette di costruire delle torri

Dettagli

Istruzioni di ripetizione in Java 1

Istruzioni di ripetizione in Java 1 in Java Corso di laurea in Informatica Le istruzioni di ripetizione consentono di eseguire molte volte la stessa Si chiamano anche cicli Come le istruzioni condizionali, i cicli sono controllati da espressioni

Dettagli