• Non ci sono risultati.

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

N/A
N/A
Protected

Academic year: 2022

Condividi "3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo"

Copied!
16
0
0

Testo completo

(1)

3 - Variabili

Programmazione e analisi di dati Modulo A: Programmazione in Java

Paolo Milazzo

Dipartimento di Informatica, Universit`a di Pisa http://pages.di.unipi.it/milazzo

milazzo di.unipi.it

Corso di Laurea Magistrale in Informatica Umanistica A.A. 2016/2017

(2)

Espressioni aritmetiche (1)

Nel programma HelloWorld abbiamo usato il comando System.out.println() per stampare unastringa

p u b l i c c l a s s H e l l o W o r l d {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { // v i s u a l i z z a un m e s s a g g i o di s a l u t o S y s t e m . out . p r i n t l n (" H e l l o W o r l d ! ");

} }

Possiamo in realt`a stampare tanti altri tipi di valori

Ad esempio, possiamo stampare il risultato di unaespressione

(3)

Espressioni aritmetiche (2)

Consideriamo il seguente programma che calcola l’area di un triangolo di base 5 cm e altezza 10 cm

p u b l i c c l a s s A r e a T r i a n g o l o {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { S y s t e m . out . p r i n t l n ( 5 * 1 0 / 2 ) ;

} }

Il programma risolve l’espressione 5*10/2 e stampa il risultato a video Nota: * rappresenta l’operazione di moltiplicazione

(4)

Espressioni aritmetiche (3)

Le espressioni aritmetiche pi`u semplici sono costituite da singoliletterali Letterali interi: 3425, 12, -34, 0, -4, 34, -1234, ....

Letterali frazionari: 3.4, 5.2, -0.1, 0.0, -12.45, 1235.3423, ....

Espressioni pi`u complesse si ottengono utilizzando operatori aritmetici moltiplicazione * divisione /

modulo % (resto della divisione tra interi) addizione + sottrazione -

Le operazioni sono elencate in ordine decrescente di priorit`a ossia 3+2*5 fa 13, non 25

Le parentesi tonde cambiano l’ordine di valutazione degli operatori ossia (3+2)*5 fa 25

Inoltre, tutti gli operatori sono associativi a sinistra ossia 3+2+5 corrisponde a (3+2)+5

quindi 18/6/3 fa 1, non 9

(5)

Espressioni aritmetiche (4)

L’operazione di divisione/ si comporta diversamente a seconda che sia applicato a letterali interi o frazionari

25/2 = 12 (divisione intera)

25%2 = 1 (resto della divisione intera) 25.0/2.0 = 12.5 (divisione reale)

25.0%2.0 = 1.0 (resto della divisione intera)

Una operazione tra un letterale intero e unfrazionario viene eseguita come tra due frazionari

25/2.0 = 12.5

1.5 + (25/2) = 13.5 (attenzioneall’ordine di esecuzione delle operazioni)

2 + (25.0/2.0) = 14.5

(6)

Variabili (1)

Modifichiamo il programma che calcola l’area di un triangolo introducendo un po’ di variabili

p u b l i c c l a s s A r e a T r i a n g o l o 2 {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { int base , a l t e z z a ;

int a r e a ; b a s e =5;

a l t e z z a = 1 0 ;

a r e a = b a s e * a l t e z z a /2;

S y s t e m . out . p r i n t l n ( a r e a );

} }

Il programma cos`ı risulta essere pi`u chiaro:

Si capisce meglio quali siano la base e l’altezza del triangolo Si capisce meglio che cosa calcola il programma

(7)

Variabili (2)

Unavariabile`e una casella di memoria identificata da unnome Il suo scopo `e di contenere un valore di un certotipo

Serve per memorizzare dati durante l’esecuzione di un programma Il nome di una variabile (come il nome di una classe o di un metodo)

`

e unidentificatore

I pu`o essere costituito da lettere, numeri e underscore (esempi: num1, i, risultato, costo_tot, ...)

I non deve coincidere con una parola chiave del linguaggio (esempi “sbagliati”: class, static, int, ...)

I `e bene che sia significativo per il programma (meglio base, altezza e area di X1, X2 e X3)

(8)

Variabili (3)

In Java ogni variabile deve essere dichiarataprima del suo uso

Nella dichiarazione di una variabile se ne specifica ilnome e iltipo(o meglio, il tipo dei valori che pu`o contenere)

Nell’esempio, abbiamo dichiarato tre variabili con nomi base, altezza e area, tutte di tipo int (numeri interi)

int base , a l t e z z a ; int a r e a ;

ATTENZIONE! Ogni variabile deve essere dichiarata UNA SOLA VOLTA (la prima volta che compare nel programma)

(9)

Assegnamento

Si pu`o memorizzare un valore in una variabile tramite l’operazione di assegnamento

Il valore da assegnare a una variabile pu`o essere un letteraleo il risultato della valutazione di un’espressione

Esempi di assegnamenti:

b a s e =5;

a l t e z z a = 1 0 ;

a r e a = b a s e * a l t e z z a /2;

Dall’ultimo esempio si pu`o notare che le variabili possono essere usate anche all’interno di espressioni

I valori di base e altezza vengono lettie usati nell’espressione Il risultato dell’espressione viene scrittonella variabile area

(10)

Dichiarazione + Assegnamento

Prima di poter essere usata (letta) in un’espressione una variabile deve:

essere stata dichiarata

essere stata assegnata almeno una volta (inizializzata) Si pu`o combinare dichiarazione e assegnamento (dichiarazione con inizializzazione). Ad esempio:

int b a s e =5;

int a l t e z z a = 1 0 ;

int a r e a = b a s e * a l t e z z a /2

(11)

Esempio: Calcolo interessi (1)

p u b l i c c l a s s I n t e r e s s i {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { d o u b l e c a p i t a l e = 1 0 0 0 0 0 ;

d o u b l e t a s s o = 0 . 0 5 ; d o u b l e i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o un a n n o i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o due a n n i i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o tre a n n i i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ; // s t a m p a il r i s u l t a t o

S y s t e m . out . p r i n t (" C a p i t a l e m a t u r a t o : ");

S y s t e m . out . p r i n t l n ( c a p i t a l e );

} }

(12)

Esempio: Calcolo interessi (2)

Risultato dell’esecuzione:

C a p i t a l e m a t u r a t o : 1 1 5 7 6 2 . 5

In questo esempio:

Alcune variabili sono inizializzate nella dichiarazione

Le variabili hanno tipo double (virgola mobile a precisione doppia) e le operazioni su tali variabili sono come tra letterali frazionari

(divisione reale)

Le variabili cambiano valoredurante l’esecuzione

Il nuovo valore di una variabile pu`o essere calcolato a partire dal precedente (capitale=capitale+interesse)

Il metodo print() visualizza un messaggio senza andare a capo

(13)

Costanti (1)

Nell’esempio Interessi la variabile tasso non cambia mai

Nella dichiarazione delle variabili che NON DEVONO mai cambiare valore si pu`o utilizzare il modificatore final

f i n a l d o u b l e t a s s o = 0 . 0 5 ;

Il modificatore final trasforma la variabile in unacostante

Il compilatore si occuper`a di controllare che il valore delle costanti non venga mai modificato (ri-assegnato) dopo essere stato inizializzato.

Aggiungere il modificatore final non cambia funzionamento programma... ma serve a prevenire erroridi programmazione

Si chiede al compilatore di controllare che una variabile non venga ri-assegnata per sbaglio.

Sapendo che una variabile non cambier`a mai valore, il compilatore

(14)

Costanti (2)

p u b l i c c l a s s I n t e r e s s i 2 {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) { d o u b l e c a p i t a l e = 1 0 0 0 0 0 ;

f i n a l d o u b l e t a s s o = 0 . 0 5 ; d o u b l e i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o un a n n o i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o due a n n i i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ;

// c a l c o l a l ’ i n t e r e s s e m a t u r a t o d o p o tre a n n i i n t e r e s s e = c a p i t a l e * t a s s o ;

c a p i t a l e = c a p i t a l e + i n t e r e s s e ; // s t a m p a il r i s u l t a t o

S y s t e m . out . p r i n t (" C a p i t a l e m a t u r a t o : ");

S y s t e m . out . p r i n t l n ( c a p i t a l e );

} }

(15)

Input dall’utente (1)

Per ricevere valori in input dall’utente si usa la classe Scanner, che fa parte dellaLibreria Standarddi Java (detta Java API)

i m p o r t j a v a . u t i l . S c a n n e r ; // r i c h i a m a la c l a s s e S c a n n e r p u b l i c c l a s s S o m m a {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) {

// p r e d i s p o n e il p r o g r a m m a per la l e t t u r a d e l l ’ i n p u t S c a n n e r i n p u t = new S c a n n e r ( S y s t e m . in );

S y s t e m . out . p r i n t l n (" I n s e r i s c i due n u m e r i i n t e r i : ");

int n1 , n2 ;

// a t t e n d e l ’ i n s e r i m e n t o di due n u m e r i e li a s s e g n a n1 = i n p u t . n e x t I n t ();

n2 = i n p u t . n e x t I n t ();

// c a l c o l a e s t a m p a la s o m m a S y s t e m . out . p r i n t (" S o m m a : ");

S y s t e m . out . p r i n t l n ( n1 + n2 );

} }

(16)

Input dall’utente (2)

La classe Scanner deve essere richiamata usando la direttiva import prima dell’inizio della classe

i m p o r t j a v a . u t i l . S c a n n e r ;

L’oggetto input (che pu`o essere chiamato anche differentemente) deve essere predisposto (creato) prima di iniziare a chiedere i valori all’utente

S c a n n e r i n p u t = new S c a n n e r ( S y s t e m . in );

La lettura vera e propria dei valori in input si fa tramite metodi diversi a seconda del tipo dei valori attesi

x = i n p u t . n e x t I n t (); // l e g g e un n u m e r o i n t e r o

y = i n p u t . n e x t D o u b l e (); // l e g g e un n u m e r o f r a z i o n a r i o

Riferimenti

Documenti correlati

Ogni area della schermata principale di Eclipse ` e detta Vista (View) La vista centrale ci consentira di scrivere il nostro programma La vista “Package Explorer” (a sinistra)

In Java, l’Input/Output su file segue il modello degli stream (o flussi) Uno stream di input prevede una sorgente di dati (es. un file) che possono essere utilizzati da un

successo delle applet Java: programmi Java eseguibili dentro al browser Web (la JVM installata come plug-in del browser) Con il tempo altre tecnologie soppiantano Java nell’ambito

=⇒ Non serve specificare la dimensione del vettore nel parametro formale ( `e un puntatore al tipo degli elementi del vettore).. Quando passiamo una matrice ad una funzione, per

La guardia pu` o essere una qualunque espressione booleana Il comando (o blocco) ` e detto corpo del do-while. Semantica

Il numero di figli di ogni nodo di un albero pu` o essere fiassato o variabile Quando il numero dei figli di ogni nodo ` e fissato a 2, l’albero si dice binario (come

Teorema di integrabilit`a, teorema di equivalenza, propriet`a di ad- ditivit`a rispetto all’insieme di integrazione, teorema di Fubini, insiemi sem- plici e formule di

 Quando un tipo è dichiarato con typedef su strutture aggregate anonime (struct e union senza tag), le variabili di quel nuovo tipo sono considerate dello stesso tipo.