33
1 Parte 3 Fondamenti di programmzione

1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

Embed Size (px)

Citation preview

Page 1: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

11

Parte 3

Fondamenti di programmzione

Page 2: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

22

Cosa è Java

Linguaggio di programmazione familiareSimile a C e C++

Linguaggio di programmazione orientato a oggettiFacile da modificare e altamente riutilizzabile

Linguaggio robustoRestrizioni per evitare che le applicazioni generino errori

Linguaggio ad alte prestazioniStrumenti per la gestione di più processi

Linguaggio portabile Applicazioni eseguibili su Windows, Linux o MacOS

Linguaggio semplicePochi strumenti base e molte librerie

Page 3: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

33

Compilatori tradizionali

codice sorgente

compilatore Windows

compilatore Linux

compilatore MacOS

codice eseguibile Windows

codice eseguibile Linux

codice eseguibile MacOS

Page 4: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

44

Compilatore Java

codice sorgente

compilatore Windows

compilatore Linux

compilatore MacOS

interprete bytecode Windows

interprete bytecode Linux

interprete bytecode MacOS

Java bytecode

Page 5: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

55

Programmazione

Concetti base: dati istruzioni

Dati: variabili tipi

Istruzioni: istruzioni base strutture di controllo sotto-programmi

Page 6: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

66

Variabili e tipi

Variabile: locazione di memoria a cui è dato un nome con cui chiamarla ed utilizzarla

programmatore usa il nome senza necessariamente sapere che esso faccia riferimento ad una locazione di memoria

Tipo: ogni variabile ha un tipo che indica che genere di dati la variabile può contenere

una variabile può contenere dati di tipo intero (ad es., 15 o 2038), oppure dati di tipo carattere (ad es., ‘a’ o ‘£’) oppure dati di tipo stringa (ad es., “java” o “pascal”)

Page 7: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

77

Istruzioni base

Assegnazioni ed espressioni: comandi per leggere e scrivere dati in una variabile e per fare calcoli esempio: interest = amount * 0.07;

Input/Output: comandi per ricevere dati dall’utente o da un file su disco e comandi per inviare dati nell’altra direzione

Page 8: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

88

Strutture di controllo

Un programma è una sequenza di istruzioni Il calcolatore esegue le istruzioni nell’ordine

in cui esse appaiono, una dopo l’altra molto limitato

Le strutture di controllo sono istruzioni speciali che consentono di modificare il normale flusso di istruzioni

Due tipi base di strutture di controllo cicli

permettono di ripetere una sequenza di istruzioni diramazioni

permettono di decidere tra due o più diverse alternative di proseguimento

Page 9: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

99

Sotto-programmi I programmi sono spesso abbastanza complessi da

dover essere scomposti in “pezzi” più maneggevoli Un sotto-programma consiste di istruzioni per

svolgere un certo compito raggruppate insieme in un’unità a cui è dato un nome

il nome può essere usato come sostituto dell’intero insieme di istruzioni

Esempio uno dei compiti del programma consiste nel disegnare un

rettangolo sullo schermo scrivere le necessarie istruzioni e raggrupparle in un sotto-programma di nome drawRect

ogni volta che il programma deve disegnare un rettangolo, lo può fare con una semplice istruzione: drawRect();

Vantaggi: risparmio di scrittura, organizzazione, riutilizzo

Page 10: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1010

Che cosa è una variabile?Che cosa è una variabile? Una locazione in cui memorizzare dati ed a cui è assegnato un nome un contenitore di dati

Può contenere un solo tipo di dati per esempio, solo numeri interi, solo numeri reali oppure solo caratteri

Una locazione in cui memorizzare dati ed a cui è assegnato un nome un contenitore di dati

Può contenere un solo tipo di dati per esempio, solo numeri interi, solo numeri reali oppure solo caratteri

Page 11: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1111

Creazione di variabiliCreazione di variabili Tutte le variabili devono essere dichiarate

prima di poterle utilizzare

Una dichiarazione di variabile associa un nome alle locazioni di memoria ad essa corrispondenti e specifica il tipo di dati che la variabile conterrà:

Tipo Variabile_1, Variabile_2, …;

Per esempio, per creare tre variabili che memorizzino il numero di cesti, il numero di uova per cesto ed il numero totale di uova:

int numberOfBaskets, eggsPerBasket, totalEggs;

Tutte le variabili devono essere dichiarate prima di poterle utilizzare

Una dichiarazione di variabile associa un nome alle locazioni di memoria ad essa corrispondenti e specifica il tipo di dati che la variabile conterrà:

Tipo Variabile_1, Variabile_2, …;

Per esempio, per creare tre variabili che memorizzino il numero di cesti, il numero di uova per cesto ed il numero totale di uova:

int numberOfBaskets, eggsPerBasket, totalEggs;

Page 12: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1212

Nomi di variabili: identificatoriNomi di variabili: identificatori

Regole- devono essere rispettate

tutti gli identificatori Java devono obbedire alle stesse regole

non devono cominciare con una cifra

devono contenere solo numeri, lettere, simboli ‘_’ e ‘$’ (ma è meglio evitare ‘$’, in quanto è riservato per scopi particolari)

sono sensibili alle maiuscole (ThisName e thisName sono due diversi nomi di variabili)

Regole- devono essere rispettate

tutti gli identificatori Java devono obbedire alle stesse regole

non devono cominciare con una cifra

devono contenere solo numeri, lettere, simboli ‘_’ e ‘$’ (ma è meglio evitare ‘$’, in quanto è riservato per scopi particolari)

sono sensibili alle maiuscole (ThisName e thisName sono due diversi nomi di variabili)

Regole di programmazione - dovrebbero essere rispettate

usare sempre nomi che abbiano un significato (ad esempio, eggsPerBasket invece di n o di count)

iniziare i nomi di variabile con una lettera minuscola

iniziare le parole interne al nome con una lettera maiuscola (meglio eggsPerBasket di eggsperbasket)

evitare di usare ‘$’ in quanto è riservato a scopi particolari

Regole di programmazione - dovrebbero essere rispettate

usare sempre nomi che abbiano un significato (ad esempio, eggsPerBasket invece di n o di count)

iniziare i nomi di variabile con una lettera minuscola

iniziare le parole interne al nome con una lettera maiuscola (meglio eggsPerBasket di eggsperbasket)

evitare di usare ‘$’ in quanto è riservato a scopi particolari

Page 13: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1313

Due tipi di tipi di dati in JavaDue tipi di tipi di dati in Java

primitivi I tipi più semplici Non possono essere

decomposti in altri tipi

Contengono solo valori Esempi:

int - interodouble - realechar - carattere

primitivi I tipi più semplici Non possono essere

decomposti in altri tipi

Contengono solo valori Esempi:

int - interodouble - realechar - carattere

classi Più complessi Composti di altri tipi

(primitivi o classi) Contengono sia dati che

metodi Esempio:

IntegerString

classi Più complessi Composti di altri tipi

(primitivi o classi) Contengono sia dati che

metodi Esempio:

IntegerString

Page 14: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1414

Tipi di Dati PrimitiviTipi di Dati Primitivi

Nome

Tipo di valore

Memoria usata

Insieme di valori

byte intero 1 byte da -128 a 127

short intero 2 byte da -32768 a 32767

int intero 4 byte da -2,147,483,648 a 2,147,483,647

long intero 8 byte da -9,223,372,036,854,775,808 a 9,223,374,036,854,775,808

float reale 4 byte da +/- 3.4028… x 10+38 a +/- 1.4023… x 0-45

double reale 8 byte da +/- 1.767… x 10+308 a +/- 4.940… x 0-324

char carattere (Unicode) 2 byte tutti i caratteri Unicode

boolean true oppure false 1 bit

Page 15: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1515

Quali sapere per oraQuali sapere per ora

int semplicemente numeri

interi possono essere positivi

e negativi nessun punto decimale

char semplicemente un

singolo carattere utilizza le virgolette

singole per esempio, `A`;

int semplicemente numeri

interi possono essere positivi

e negativi nessun punto decimale

char semplicemente un

singolo carattere utilizza le virgolette

singole per esempio, `A`;

double numeri reali, sia

positivi che negativi ha un punto decimale

(parte frazionaria) due formati

numero con punto decimale, a.e. 514.061

notazione e o scientifica, a.e. 5.14061 e2, che significa 5.14061 x 102

double numeri reali, sia

positivi che negativi ha un punto decimale

(parte frazionaria) due formati

numero con punto decimale, a.e. 514.061

notazione e o scientifica, a.e. 5.14061 e2, che significa 5.14061 x 102

Page 16: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1616

Assegnare valori alle variabiliAssegnare valori alle variabili

Istruzione di assegnazione variabile = espressione;

esempio: answer = 42; Operatore di assegnazione: “=“

non lo stesso dell’algebra significa: “assegna il valore dell’espressione alla

destra del segno di uguale alla variabile alla sinistra.”

se numberOfCards ha il valore 7 e handicap ha il valore 2, allora la seguente istruzione imposta il valore di score a 9:score = numberOfCards + handicap;

La variabile può apparire in entrambi i lati:int count = 10;count = count - 1; nuovo valore di count = 10 - 1 = 9

Istruzione di assegnazione variabile = espressione;

esempio: answer = 42; Operatore di assegnazione: “=“

non lo stesso dell’algebra significa: “assegna il valore dell’espressione alla

destra del segno di uguale alla variabile alla sinistra.”

se numberOfCards ha il valore 7 e handicap ha il valore 2, allora la seguente istruzione imposta il valore di score a 9:score = numberOfCards + handicap;

La variabile può apparire in entrambi i lati:int count = 10;count = count - 1; nuovo valore di count = 10 - 1 = 9

Page 17: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1717

Assegnare valori iniziali alle variabili

Assegnare valori iniziali alle variabili

I valori iniziali possono o meno essere assegnati quando le variabili sono dichiarate:

int totalEggs, numberOfBaskets, eggsPerBasket;

oppure

int totalEggs = 0;int numberOfBaskets = 0;int eggsPerBasket = 0;

Suggerimento: è una buona regola di programmazione inizializzare sempre le variabili.

I valori iniziali possono o meno essere assegnati quando le variabili sono dichiarate:

int totalEggs, numberOfBaskets, eggsPerBasket;

oppure

int totalEggs = 0;int numberOfBaskets = 0;int eggsPerBasket = 0;

Suggerimento: è una buona regola di programmazione inizializzare sempre le variabili.

Page 18: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1818

Cambiare il valore di una variabileCambiare il valore di una variabile

Generalmente il valore viene cambiato (è assegnato un valore diverso) in qualche parte del programma

Può essere calcolato a partire da altri valori:

totalEggs = numberOfBaskets * eggsPerBasket;

Oppure può essere letto in input vedremo più avanti

Generalmente il valore viene cambiato (è assegnato un valore diverso) in qualche parte del programma

Può essere calcolato a partire da altri valori:

totalEggs = numberOfBaskets * eggsPerBasket;

Oppure può essere letto in input vedremo più avanti

Page 19: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

1919

Operatori di assegnazione specializzatiOperatori di assegnazione specializzati Un’abbreviazione per eseguire un’operazione ed

assegnare un nuovo valore ad una variabile Forma generale: var <op>= expression;

equivalente a: var = var <op> (expression); <op> è +, -, *, /, or %

Esempi:amount += 5;

//amount = amount + 5;

amount *= 1 + interestRate;

//amount = amount * (1 + interestRate); La parte destra è trattata come una singola

unità (come se vi fossero delle parentesi)

Un’abbreviazione per eseguire un’operazione ed assegnare un nuovo valore ad una variabile

Forma generale: var <op>= expression; equivalente a: var = var <op> (expression); <op> è +, -, *, /, or %

Esempi:amount += 5;

//amount = amount + 5;

amount *= 1 + interestRate;

//amount = amount * (1 + interestRate); La parte destra è trattata come una singola

unità (come se vi fossero delle parentesi)

Page 20: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2020

CostantiCostanti• Le costanti sono simili alle variabili, ma possono contenere un solo valore per tutta la durata della loro esistenza.• In Java si dichiarano le costanti premettendo la parola chiave final.• E’ convenzione usare lettere maiuscole.

Es.: final int NUMERO_MASSIMO_POSTI = 427

• E’ buona pratica usare costanti invece di valori numerici (letterali) perche’ si evita di modificarli inavvertitamente.

Page 21: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2121

Valore di ritornoValore di ritorno

Le espressioni ritornano valori: il numero prodotto da un’espressione è il “valore di ritorno”int numberOfBaskets, eggsPerBasket, totalEggs;

numberOfBaskets = 5;

eggsPerBasket = 8;

totalEggs = numberOfBaskets * eggsPerBasket; nell’ultima linea numberOfBaskets ritorna il valore 5 e eggsPerBasket ritorna il valore 8

numberOfBaskets * eggsPerBasket è un’espressione che ritorna il valore intero 40

Le espressioni ritornano valori: il numero prodotto da un’espressione è il “valore di ritorno”int numberOfBaskets, eggsPerBasket, totalEggs;

numberOfBaskets = 5;

eggsPerBasket = 8;

totalEggs = numberOfBaskets * eggsPerBasket; nell’ultima linea numberOfBaskets ritorna il valore 5 e eggsPerBasket ritorna il valore 8

numberOfBaskets * eggsPerBasket è un’espressione che ritorna il valore intero 40

Page 22: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2222

Conversione di tipoConversione di tipo

La conversione di tipo cambia il tipo di dato di un valore Non è possibile assegnare un valore di un tipo ad una

variabile di un tipo diverso, a meno che non lo si converta in modo da coincidere con il tipo della variabile

La conversione di tipo modifica solo il tipo del valore di ritorno, non il tipo della variabile ad esempio:

double x;int n = 5;x = n; poiché n è un int ed x è un double, il valore ritornato da n (non n) deve essere convertito in un double prima di essere assegnato ad x

La conversione di tipo cambia il tipo di dato di un valore Non è possibile assegnare un valore di un tipo ad una

variabile di un tipo diverso, a meno che non lo si converta in modo da coincidere con il tipo della variabile

La conversione di tipo modifica solo il tipo del valore di ritorno, non il tipo della variabile ad esempio:

double x;int n = 5;x = n; poiché n è un int ed x è un double, il valore ritornato da n (non n) deve essere convertito in un double prima di essere assegnato ad x

Page 23: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2323

Conversione implicitaConversione implicita

La conversione di tipo è eseguita implicitamente (in modo automatico) quando un tipo “più basso” viene assegnato ad un tipo “più alto” secondo la seguente gerarchia:

byte --> short --> int --> long --> float --> double

Ad esempio:double x;

int n = 5;

x = n; il valore di ritorno di n è convertito (in modo implicito)

in un double, e quindi assegnato ad x x contiene 5.0 il tipo di dato della variabile n è invariato (ovvero

ancora int)

La conversione di tipo è eseguita implicitamente (in modo automatico) quando un tipo “più basso” viene assegnato ad un tipo “più alto” secondo la seguente gerarchia:

byte --> short --> int --> long --> float --> double

Ad esempio:double x;

int n = 5;

x = n; il valore di ritorno di n è convertito (in modo implicito)

in un double, e quindi assegnato ad x x contiene 5.0 il tipo di dato della variabile n è invariato (ovvero

ancora int)

Page 24: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2424

Ancora conversione implicitaAncora conversione implicita Alcune espressioni includono valori di tipo diverso Tutti i valori sono automaticamente (in modo

implicito) fatti avanzare al livello più alto prima di eseguire il calcolo del valore di ritorno

Ad esempio:double a;

int n = 2;

float x = 5.1;

double y = 1.33;

a = (n * x)/y; i valori di n ed x sono automaticamente convertiti al tipo double prima di eseguire la moltiplicazione e la divisione

Alcune espressioni includono valori di tipo diverso Tutti i valori sono automaticamente (in modo

implicito) fatti avanzare al livello più alto prima di eseguire il calcolo del valore di ritorno

Ad esempio:double a;

int n = 2;

float x = 5.1;

double y = 1.33;

a = (n * x)/y; i valori di n ed x sono automaticamente convertiti al tipo double prima di eseguire la moltiplicazione e la divisione

Page 25: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2525

Conversione esplicitaConversione esplicita

La conversione esplicita è necessaria in tutti i casi non coperti da quella implicta

Ad esempio:int points;double distance = 9.0;points = distance; l’ultima istruzione è illegale (anche se la parte frazionaria è 0)

Porre di fronte al valore il cui tipo deve essere convertito il nuovo tipo tra parentesi:points = (int)distance; quest’istruzione è legale

La conversione esplicita è necessaria in tutti i casi non coperti da quella implicta

Ad esempio:int points;double distance = 9.0;points = distance; l’ultima istruzione è illegale (anche se la parte frazionaria è 0)

Porre di fronte al valore il cui tipo deve essere convertito il nuovo tipo tra parentesi:points = (int)distance; quest’istruzione è legale

Page 26: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2626

TroncamentoTroncamento

Conversione da reale ad intero non arrotonda, ma tronca la parte frazionaria viene semplicemente ignorata

Ad esempio:int numberOfDollars;

double dinnerBill = 26.99;

numberOfDollars = (int) dinnerBill; il valore di numberOfDollars è ora 26

Conversione da reale ad intero non arrotonda, ma tronca la parte frazionaria viene semplicemente ignorata

Ad esempio:int numberOfDollars;

double dinnerBill = 26.99;

numberOfDollars = (int) dinnerBill; il valore di numberOfDollars è ora 26

Page 27: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2727

Divisione reale e divisione interaDivisione reale e divisione intera Se almeno uno dei valori che occorrono nella divisione è di tipo float o double, allora non si ha nessun troncamento (tutti i valori sono convertiti al tipo più alto)

Il troncamento si verifica se tutti i valori sono interi

Ad esempio:int a = 4, b =5, c;double x = 1.5, y;y = b/x;c = b/a; il valore di y è 3.333... mentre quello di c è 1

Se almeno uno dei valori che occorrono nella divisione è di tipo float o double, allora non si ha nessun troncamento (tutti i valori sono convertiti al tipo più alto)

Il troncamento si verifica se tutti i valori sono interi

Ad esempio:int a = 4, b =5, c;double x = 1.5, y;y = b/x;c = b/a; il valore di y è 3.333... mentre quello di c è 1

Page 28: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2828

Caratteri come interiCaratteri come interi Il tipo di dati char memorizza un singolo carattere

stampabile Ad esempio:

char answer = `y`; I caratteri sono in realtà memorizzati come interi secondo

un codice speciale ogni carattere stampabile (lettera, cifra, segno di

interpunzione, spazio e tabulazione) ha associato un codice intero distinto

i codici sono distinti a seconda delle maiuscole o delle minuscole

ad esempio, 97 potrebbe essere il codice di ‘a’ e 65 quello di ‘A’

ASCII e Unicode sono due codici molto frequenti Unicode include tutti i codici ASCII più altri codici per

linguaggi con alfabeto diverso da quello italiano Java usa Unicode

Il tipo di dati char memorizza un singolo carattere stampabile

Ad esempio:char answer = `y`;

I caratteri sono in realtà memorizzati come interi secondo un codice speciale ogni carattere stampabile (lettera, cifra, segno di

interpunzione, spazio e tabulazione) ha associato un codice intero distinto

i codici sono distinti a seconda delle maiuscole o delle minuscole

ad esempio, 97 potrebbe essere il codice di ‘a’ e 65 quello di ‘A’

ASCII e Unicode sono due codici molto frequenti Unicode include tutti i codici ASCII più altri codici per

linguaggi con alfabeto diverso da quello italiano Java usa Unicode

Page 29: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

2929

Conversione di carattere in interoConversione di carattere in intero La conversione di un valore di tipo char produce il suo codice Unicode

Ad esempio, eseguendo le seguenti istruzioni

char answer = `7`;

int intAnswer = answer;il valore di intAnswer sarebbe 55 (non 7) in quanto 55 è il codice Unicode del carattere ‘7’

La conversione di un valore di tipo char produce il suo codice Unicode

Ad esempio, eseguendo le seguenti istruzioni

char answer = `7`;

int intAnswer = answer;il valore di intAnswer sarebbe 55 (non 7) in quanto 55 è il codice Unicode del carattere ‘7’

Page 30: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

3030

Imprecisione di numeri in virgola mobileImprecisione di numeri in virgola mobile

I calcolatori memorizzano i numeri utilizzando un numero fissato di bit, per cui non tutti i numeri reali possono essere codificati in modo esatto un numero infinito di bit sarebbe richiesto per

rappresentare in modo esatto ogni numero reale ad esempio, se il calcolatore può rappresentare

solo 10 cifre dopo il punto decimale, allora il numero reale 1/3=0.33333... sarebbe memorizzato come 0.3333333333 (che non è esattamente 1/3)

Gli interi, al contrario, sono memorizzati in modo esatto se il valore 2 è assegnato ad una variabile di tipo

int, il suo valore è esattamente 2

I calcolatori memorizzano i numeri utilizzando un numero fissato di bit, per cui non tutti i numeri reali possono essere codificati in modo esatto un numero infinito di bit sarebbe richiesto per

rappresentare in modo esatto ogni numero reale ad esempio, se il calcolatore può rappresentare

solo 10 cifre dopo il punto decimale, allora il numero reale 1/3=0.33333... sarebbe memorizzato come 0.3333333333 (che non è esattamente 1/3)

Gli interi, al contrario, sono memorizzati in modo esatto se il valore 2 è assegnato ad una variabile di tipo

int, il suo valore è esattamente 2

Page 31: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

3131

L’operatore di modulo: % L’operatore di modulo: %

Usato con i tipi interi a%b restituisce il resto della divisione di b per a

Ad esempio:int a = 14; b = 4, c;c = a%b; c ora ha il valore 2, che è il reso della divisione di 14 per 4

Ha molte applicazioni consente di contare modulo 2, 3 o qualsiasi altro numero

consente di distinguere numeri pari da numeri dispari consente di eseguire un’operazione solo in corrispondenza dei multipli di un dato numero

Usato con i tipi interi a%b restituisce il resto della divisione di b per a

Ad esempio:int a = 14; b = 4, c;c = a%b; c ora ha il valore 2, che è il reso della divisione di 14 per 4

Ha molte applicazioni consente di contare modulo 2, 3 o qualsiasi altro numero

consente di distinguere numeri pari da numeri dispari consente di eseguire un’operazione solo in corrispondenza dei multipli di un dato numero

Page 32: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

3232

Precedenze e parentesi Precedenze e parentesi Le espressioni Java soddisfano regole simili

all’algebra dei numeri reali Si usano le parentesi per forzare la precedenza

Tranne i casi in cui la precedenza è corretta ed ovvia, conviene usare le parentesi per facilitare la lettura dell’espressione

Le espressioni Java soddisfano regole simili all’algebra dei numeri reali

Si usano le parentesi per forzare la precedenza Tranne i casi in cui la precedenza è corretta ed ovvia,

conviene usare le parentesi per facilitare la lettura dell’espressione

Espressioni matematiche

Espressione Java (forma preferita)

Espressione Java con tutte le parentesi

rate2 + delta rate*rate + delta (rate*rate) + delta

2(salary + bonus) 2 * (salary + bonus) 2 * (salary + bonus)

3mass time

1

+ 1/(time + 3 * mass) 1/(time + (3 * mass))

9v t

7 - a

+ (a - 7) / (t + 9 * v) (a - 7) / (t +( 9 * v))

Page 33: 1 Parte 3 Fondamenti di programmzione. 2 Cosa è Java Linguaggio di programmazione familiare Simile a C e C++ Linguaggio di programmazione orientato a

3333

Operatori di incremento e decrementoOperatori di incremento e decremento

Utilizzati per aumentare o diminuire il valore di una variabile di 1

Incremento ++

ad esempio, count++; Decremento

-- ad esempio, count--;

La variabile può essere incrementata (o decrementata) prima o dopo aver usato il suo valore attuale. Ad esempio, dopoint count=5;int n = 2*(++count);int m = 2*(count++); sia n che m hanno il valore 12, mentre count ha il valore

7

Utilizzati per aumentare o diminuire il valore di una variabile di 1

Incremento ++

ad esempio, count++; Decremento

-- ad esempio, count--;

La variabile può essere incrementata (o decrementata) prima o dopo aver usato il suo valore attuale. Ad esempio, dopoint count=5;int n = 2*(++count);int m = 2*(count++); sia n che m hanno il valore 12, mentre count ha il valore

7