1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java:...

23
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast

Transcript of 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java:...

Page 1: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

1

Corso di Informatica

(Programmazione)

Lezione 8 (7 novembre 2008)

Programmazione in Java:operatori aritmetici,

operatori di assegnamento e cast

Page 2: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

2

EspressioneUn’espressione in generale è una “combinazione” di operatori, di operandi (valori o variabili) e di parentesi tonde, e produce (restituisce) un valore di un certo tipo

Ad esempio:

- ((a+b+c)/(p-y))*k

- ((a+3)*b)-4*c+

- 2.1*a+1.34/b

dove a, b, c, p, y e k sono variabili di tipo numerico; +, -, /, * sono gli operatori di somma, sottrazione, divisione e moltiplicazione

Page 3: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

3

Ancora sull’operatore ‘=‘…Si è in precedenza visto che l’operatore di assegnamento ‘=‘ permette di assegnare il valore ad una variabile:

<identificatore>=<valore>;

Dal momento che un’espressione restituisce un valore, si può anche scrivere:

<identificatore>=<expr>;

Dove <expr> è un’espressione che restituisce un valore dello stesso tipo della variable identificata da <identificatore>. <expr> può anche essere data da un’unica variabile.

Page 4: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

4

Ancora sull’operatore ‘=‘…… in conclusione ad una variabile, tramite l’operatore ‘=‘, si può assegnare:

un valore esplicito

<identificatore>=<valore>;

il valore di un’espressione

<identificatore>=<expr>;

il contenuto di un’altra variabile

<identificatore>=<variabile>;

Page 5: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

5

Ancora sull’operatore ‘=‘…… siccome l’operatore ‘=‘ ha in genere precedenza più bassa rispetto a qualsiasi altro operatore significa che nell’istruzione:

<identificatore>=<expr>;

prima viene valutato il valore di <expr> e poi questo valore viene assegnato alla variabile indicata a sinistra di ‘=‘. Il seguente codice:int x=1;x=x+1;System.out.println(“x=“+x);

stampa la stringa “x=2” e va a capo

Page 6: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

6

Ancora sull’operatore ‘=‘…Esempio:public class AreaTriangolo {

public static void main(String arg[]) {

int base;int altezza;int areaTriangolo;

base=200; //Assegno un valore esplicitoaltezza=base; //Assegno una variabile

/*Assegno l’espressione (in questo casoaritmetica)che fornisce l’area del triangolo*/areaTriangolo=(base*altezza)/2;

System.out.println(“Area=“+areaTriangolo);}

}

Page 7: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

7

Gli operatoriUn operatore è un simbolo che regola l’esecuzione di un’espressione e che restituisce un valore che dipende dal tipo di operandi su cui agisce e dal tipo di operatore stesso.

Un operatore può essere:

unario richiede un solo operando

binario richiede due operandi

ternario richiede tre operandi

Page 8: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

8

Gli operatori (notazioni)Indicato con OP un operatore qualsiasi e con op1 e op2 due operandi qualsiasi, si ha che:

gli operatori unari utilizzano la:

notazione prefissa se l’operatore appare prima dell’operando, ad esempio OP op1

notazione postfissa se l’operatore appare dopo l’operando, ad esempio op1 OP

gli operatori binari utilizzano la notazione infissa in cui l’operatore appare tra i due operandi, ad esempio op1 OP op2

Page 9: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

9

Precedenze tra operatoriGli operatori possono essere combinati in espressioni complesse e hanno una precedenza che determina l’ordine in cui vengono valutati (eseguiti). Gli operatori con la stessa precedenza vengono valutati da sinistra a destra. L’ordine di precedenza può essere modificato utilizzando le parentesi tonde.

Page 10: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

10

Precedenze tra operatoriEsempi di espressioni aritmetiche in cui moltiplicazione e divisione hanno la precedenza su somma e sottrazione:

a+b+c+d prima viene valutata a+b, poi si aggiunge ad a+b il valore di c e poi si aggiunge ad a+b+c il valore di d

a+b*c+d/e prima viene valutata b*c, poi d/e, poi viene sommato il contenuto di a al

risultato di b*c. Infine al risultato di a+b*c viene aggiunto il risultato di d/e. L’ordine di

valutazione (e il risultato) cambierebbe se si scrivesse (a+b)*(c+d)/e

Page 11: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

11

Tipi di operatori

Gli operatori si possono suddividere in: aritmetici

aritmetici di incremento/decremento

di assegnamento (qualcosa è stato già visto…)

relazionali (…nella prossima lezione)

logici (…nella prossima lezione)

bit a bit (che non vedremo…)

Page 12: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

12

Operatore

Descrizione

Uso Significato

+ Somma op1+op2 Somma il valore di op1 a quello di op2

- Sottrazione op1-op2 Sottrae il valore di op2 a quello di op1

*Moltiplicazion

eop1*op2 Moltiplica il valore di

op1 con quello di op2

/ Divisione op1/op2 Divide il valore di op1 con quello di op2

% Modulo op1%op2 Calcola il resto della divisione tra op1 e op2

-Negazione aritmetica

-op1Trasforma il valore di

op1 nel corrispondente di segno opposto

Operatori aritmetici

Validi per operandi di tipo intero e in virgola mobile

Page 13: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

13

Operatori aritmeticiAd esempio il seguente codice:int x, y, z;x=3;y=10;z=y%x; //ModuloSystem.out.println(“Resto=“+z);z=-x; //Negazione aritmeticaSystem.out.println(“Opposto=“+z);

stampa a video:Resto=1Opposto=-3

e va a capo.

Page 14: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

14

Operatore

Descrizione

Uso Significato

++

Incremento di 1 in

notazione prefissa

++op1

Incrementa op1 di 1 e valuta il valore

dell’espressione dopo aver incrementato

++

Incremento di 1 in

notazione postfissa

op1++

Incrementa op1 di 1 e valuta il valore

dell’espressione prima aver incrementato

--

Decremento di 1 in

notazione prefissa

--op1

Decrementa op1 di 1 e valuta il valore

dell’espressione dopo aver incrementato

--

Decremento di 1 in

notazione postfissa

op1--

Decrementa op1 di 1 e valuta il valore

dell’espressione prima aver incrementato

Operatori aritmetici di incremento/decremento

Validi per operandi di tipo intero

Page 15: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

15

Ad esempio il seguente codice:int x, y;x=3;y=++x //Incremento prefissoSystem.out.println(“x=“+x+” y=“+y);x=3;y=x++; //Incremento postfissoSystem.out.println(“x=“+x+” y=“+y);

stampa a video:x=4 y=4x=4 y=3

e va a capo.

Operatori aritmetici di incremento/decremento

L’effetto delle espressioni ++x e di x++ è identicodal punto di vista del contenuto della variabile

x che quindi diventa 4 in entrambi i casi. Ladifferenza tra le due notazioni sta nel diverso

valore restituito dalle due espressioni ++x e x++.Nel primo caso è 4 e nel secondo è 3.

Page 16: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

16

… analogo discorso per il decremento:int x, y;x=3;y=--x //Decremento prefissoSystem.out.println(“x=“+x+” y=“+y);x=3;y=x--; //Decremento postfissoSystem.out.println(“x=“+x+” y=“+y);

stampa a video:x=2 y=2x=2 y=3

e va a capo.

Operatori aritmetici di incremento/decremento

L’effetto delle espressioni --x e di x-- è identicodal punto di vista del contenuto della variabile

x che quindi diventa 2 in entrambi i casi. Ladifferenza tra le due notazioni sta nel diverso

valore restituito dalle due espressioni --x e x--.Nel primo caso è 2 e nel secondo è 3.

Page 17: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

17

Espressioni di shortcut per incremento

Operatori aritmetici di incremento/decremento

Forma estesa ShortcutRisultato

dell’esecuzione

int x=0;

int y;

y=x;

x=x+1;

int x=0;

int y;

y=x++;

x=1

y=0

int x=1;

int y;

x=x+1;y=x;

int x=0;

int y;

y=++x;

x=1

y=1

Attenzione! Nell’incremento in notazione postfissa l’operatoredi assegnamento ‘=‘ ha quindi la precedenza su ++

Page 18: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

18

Espressioni di shortcut per decremento

Operatori aritmetici di incremento/decremento

Forma estesa ShortcutRisultato

dell’esecuzione

int x=1;

int y;

y=x;

x=x-1;

int x=1;

int y;

y=x--;

x=0

y=1

int x=1;

int y;

x=x-1;y=x;

int x=1;

int y;

y=--x;

x=0

y=0

Attenzione! Nel decremento in notazione postfissa l’operatoredi assegnamento ‘=‘ ha quindi la precedenza su --

Page 19: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

19

Precedenza degli operatori aritmetici

Precedenze degli operatori aritmetici:

massima precedenza pre-incremento ++, pre-decremento --, negazione aritmetica -

media precedenza post-incremento ++ e post-decremento --

bassa precedenza moltiplicazione *, divisione / e modulo %

minima precedenza somma + e sottrazione –

Page 20: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

20

Operatore

Istruzione Significato

= <var_id>=<expr>; …già visto!

+= <var_id>+=<expr>; <var_id>=<var_id>+<expr>

-= <var_id>-=<expr>; <var_id>=<var_id>-<expr>

*= <var_id>*=<expr>; <var_id>=<var_id>*<expr>

/= <var_id>/=<expr>; <var_id>=<var_id>/<expr>

%= <var_id>%=<expr>; <var_id>=<var_id>%<expr>

Operatori di assegnamento

Page 21: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

21

Il cast dei datiSi è detto che il valore da assegnare ad una variabile deve essere del suo stesso tipo. Cosa succede dunque se si tenta di assegnare ad una variabile di un tipo un valore di tipo diverso?

Il cast rappresenta l’operazione di conversione di tipo ed è consentito tra tipi primitivi (ad esempio tra int e float).

Il cast può essere:

implicito avviene automaticamente in quanto è un’operazione sicura che non comporta perdita di informazione

esplicito avviene ad opera del programmatore che forza la conversione anche a costo di una perdita di informazione

Page 22: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

22

Il cast dei datiIl cast implicito avviene automaticamente quando ad una variabile di tipo “più alto” viene assegnato un valore di tipo “più basso”. Ad esempio:float f;int x=10;f=x;

I tipi primitivi numerici possono essere ordinati dal“più basso” al “più alto” nel modo seguente:byte short int long float double

Il valore di x (10) viene automaticamente convertito in floating point 10.0 e quindi assegnato alla variabile f

Page 23: 1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.

23

Il cast dei datiIl cast esplicito deve essere esplicitato (anteponendo, al valore da assegnare, il tipo scritto tra parentesi tonde) quando ad una variabile di tipo “più basso” viene assegnato un valore di tipo “più alto”. Ad esempio:int x;double d=3.6;x=(int)d;

I tipi primitivi numerici possono essere ordinati dal“più basso” al “più alto” nel modo seguente:byte short int long float double

Il valore di d (3.6) viene “a forza” convertito in intero 3 e quindi assegnato alla variabile x