Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array...

57
Tipi numerici Conversioni e promozioni Array di tipi primitivi Tipi primitivi ed array G. Grossi 8 novembre 2006 G. Grossi Lezione 4

Transcript of Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array...

Page 1: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi primitivi ed array

G. Grossi

8 novembre 2006

G. Grossi Lezione 4

Page 2: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 3: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 4: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 5: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Tipi numerici

Tipo Contiene Default Size Range

char car Unicode \u0000 16 bit da \u0000 a \uFFFF

byte int con segno 0 8 bit da −27 a 27 − 1

short int con segno 0 16 bit da −215 a 215 − 1

int int con segno 0 32 bit da −231 a 231 − 1

long int con segno 0 64 bit da −263 a 263 − 1

float Std IEEE 754 0.0 32 bit (± 1.4E-45, ± 3.4E+38)

double Std IEEE 754 0.0 64 bit (± 4.9E-324, ± 1.8E+308)

Osservazione: 10 ≈ 23.32, da cui si ha che 231 ≈ 1031

3.32 ≈ 2 · 109

G. Grossi Lezione 4

Page 6: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Letterali numerici

char c = 0xffff; // massimo valore char (hex)byte b = 0x7f; // massimo valore byte (hex)short s = 0x7fff; // massimo valore short (hex)int i1 = 0x2f; // Hexadecimal (minuscolo)int i2 = 0X2F; // Hexadecimal (maiuscolo)int i3 = 0177; // Ottale (zero seg. da cifre 1..7)long n1 = 200L; // suffisso longlong n2 = 200l; // suffisso longlong n3 = 200;float f1 = 1;float f2 = 1F; // suffisso floatfloat f3 = 1f; // suffisso floatfloat f4 = 1e-45f; // 10ˆ(-45)float f5 = 1e+9f; // suffisso floatdouble d1 = 1d; // suffisso doubledouble d2 = 1D; // suffisso doubledouble d3 = 47e47d; // 10ˆ(47)

G. Grossi Lezione 4

Page 7: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 8: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica modulare

Con l’aritmetica intera non si verificano overflow o underflow

int i = 1000000; // 10ˆ6

int j = 1000000; // 10ˆ6

out.println(i * j);

i = 2147483647; // 2ˆ31 - 1

out.println(i + 1);

i = -2147483648; // -2ˆ31

out.println(i - 1);

Che cosa viene stampato?

G. Grossi Lezione 4

Page 9: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica modulare

Outputprompt> -727379968

prompt> -2147483648

prompt> 2147483647

G. Grossi Lezione 4

Page 10: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Doppia precisione intera

long l = 9223372036854775807; // non compila!

long l = 9223372036854775807L; // 2ˆ63-1

//ordine 10ˆ18

out.println(l + 1);

Che cosa viene stampato?

prompt> -9223372036854775808

G. Grossi Lezione 4

Page 11: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 12: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica in virgola mobile

Overflow e underflow in virgola mobile

double d = 1e308;out.print("L’overflow produce infinito: ");out.println(d + "*10==" + d*10);

out.println("underflow graduale:");d = 1e-305 * 3.14;out.println(d);for (i = 0; i < 4; i++)

out.println(d /= 100000);

Che cosa viene stampato?

G. Grossi Lezione 4

Page 13: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica in virgola mobile

Outputprompt> 1.0E308*10==Infinity

prompt> 3.14E-3053.14E-3103.14E-3153.14E-3200.0

G. Grossi Lezione 4

Page 14: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica in virgola mobile

Non e un numero!

// Un esempio di NaN:

out.print("0.0/0.0, cioe’ Not-a-Number: ");d = 0.0/0.0;out.println(d);

Che cosa viene stampato?prompt> 0.0/0.0, cioe’ Not-a-Number: NaN

// e nel caso intero?

out.print("0/0 = " + 0/0);

Che cosa viene stampato?

G. Grossi Lezione 4

Page 15: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica in virgola mobile

Risultato non corretto per effetto di arrotondamenti

out.print("risultato non corretto con i float:");for (i = 0; i < 100; i++) {

float z = 1.0f / i;if (z * i != 1.0f)

out.print(" " + i);}out.print("risultato non corretto con i double:");for (i = 0; i < 100; i++) {

double z = 1.0 / i;if (z * i != 1.0)

out.print(" " + i);}

Che cosa viene stampato?

G. Grossi Lezione 4

Page 16: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica in virgola mobile

Outputprompt> 0 41 47 55 61 82 83 94 97

prompt> 0 49 98

G. Grossi Lezione 4

Page 17: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Letterali di default

int per i tipi numerici interi

byte b = 10;int i = 10;long l = 10L;

double per i tipi floating point

float s = 1; // compila

float s = 1.3; // non compila

float s = 1.3f; // compila

double d = 1.3; // compila

G. Grossi Lezione 4

Page 18: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Tipi di conversione: riassunto

Esistono due tipi di conversione in Java:widening conversion (= ampliamento, promozione) siverifica quando un valore numerico di un dato tipo vieneassegnato a una variabile il cui tipo supporta un insieme divalori piu estesonarrowing conversion (= restringimento, forzatura) siverifica quando un valore numerico di un dato tipo vieneassegnato a una variabile il cui tipo supporta un insieme divalori meno esteso

Nel primo caso le conversioni sono implicite (o automatiche).Nel secondo caso devono essere rese esplicite (o forzate) conil costrutto cast

G. Grossi Lezione 4

Page 19: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Conversioni di tipi: tabella riassuntiva

Da: A: byte short char int long float double

byte → - W N W W W W

short → N - N W W W W

char → N N - W W W W

int → N N N - W W∗ W

long → N N N N - W∗ W∗

float → N N N N N - W

double → N N N N N N -

N = narrowing (restringimento)W = widening (ampliamento)W∗ = widening con possibile perdita di cifre meno significative

G. Grossi Lezione 4

Page 20: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Cast

Necessita del cast nelle operazioni aritmetiche

int i = 1000000000;// i = 1.000.000.000

int j = 3*i; // j = -1.294.967.296

long k = 3*i; // k = -1.294.967.296

long w = (long)3*i;// w = 3.000.000.000

Cast richiesto dal controllo sui tipi

byte b = 1000; // non compila

int i = 10;byte b = i; // non compila

byte b = (byte)i;char c = (char)i;double d = 1.33;float f = d; // non compila

float f = (double)d;

G. Grossi Lezione 4

Page 21: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Perdita d’informazione

Assegnamento accettato senza cast (widening)

// perdita d’informazione

i = 1234567890;float f = i;out.println("f - i = " + ((int)f - i));

long p = 1234567890123456789L;double q = p;out.println("q - p = " + ((long)q - p));

Che cosa viene stampato?

G. Grossi Lezione 4

Page 22: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Perdita d’informazione

Outputprompt>f - i = 46

prompt>q - p = -21

G. Grossi Lezione 4

Page 23: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 24: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Espressioni semplici

Il piu semplice tipo di espressioni consite di letterali e variabili(espressioni semplici)

Esempi:

13.452; // letterale floating point

somma; // variabile

L’interprete Java valuta un’espressione e ne restituisce il valoreSe si tratta di un letterale e il valore rappresentato dalletterale stessoSe si tratta di una variabile il valore in essa contenuto

G. Grossi Lezione 4

Page 25: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Espressioni composte

Le espressioni composte si ottengono combinandoopportunamente espressioni semplici e operatori

Esempi:

// operatori di prodotto e divisione

area = base * altezza / 2;

// invocazione di metodo

in.readDouble();

Osservazione: l’invocazione di metodo costituisce anch’essaun’espressione semplice

G. Grossi Lezione 4

Page 26: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Operatori e operandi

Gli operandi sono gli argomenti dell’operatore. Alcunioperatori operano solo su un operando (operatore unario),altri ne richiedono due (operatore binario) ecc.Java ha operatori unari, binari e ternari (un solo caso!)Ogni operatore si aspetta che i suoi operandi siano di unparticolare tipoFissato l’operatore e il tipo degli operandi e univocamentedeterminato il tipo del risultato dell’espressioneOgni espressione ha un tipo determinato da quello dei suoicomponenti e dalla semantica degli operatori coinvolti.

G. Grossi Lezione 4

Page 27: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Conversioni implicite di tipo

Tipo ris.Tipo degli operandi

long Nessun operando e un float o un double(aritmetica intera); ma almeno uno e un long

int Nessun operando e un float o un double(aritmetica intera); nessun operando e un long

double Almeno un operando e un double.

float Almeno un operando e un float; nessun operandoe un double.

G. Grossi Lezione 4

Page 28: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitiviTipi ed espressioni

Precedenze tra operatori

Tipo di operatore OperatorePostfissi [] . (parametri) expr++ expr--

Unari ++expr --expr +expr -expr !

Creazione e conversione new (tipo)expr

Moltiplicativi * / %

Additivi + -

Scorrimento << >> >>>

Relazionali < > <= >= instanceof

Uguaglianza == !=

AND &

... ...

Condizionale ?:

Assegnamenti = += -= *= /= %=

G. Grossi Lezione 4

Page 29: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 30: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Problema

PermutazioniScrivere un programma Java che stampi n > 0 permutazionicasuali di un insieme di numeri assegnato

Che cosa si intende per permutazione?1 2 3 4 5 6 7 8 9 10

3 6 10 9 1 7 2 4 8 5

G. Grossi Lezione 4

Page 31: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Progettazione

Metodo top down ...

Definizione dei sottoproblemi

acquisire dall’utente il numero di permutazioni richiesteeffettuare una copia dell’array da elaborare (cosı damantenere inalterato l’originale)determinare le permutazioni casuali dell’insieme richiestestampare le permutazioni

G. Grossi Lezione 4

Page 32: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Progettazione

Metodo top down ...

Definizione dei sottoproblemiacquisire dall’utente il numero di permutazioni richieste

effettuare una copia dell’array da elaborare (cosı damantenere inalterato l’originale)determinare le permutazioni casuali dell’insieme richiestestampare le permutazioni

G. Grossi Lezione 4

Page 33: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Progettazione

Metodo top down ...

Definizione dei sottoproblemiacquisire dall’utente il numero di permutazioni richiesteeffettuare una copia dell’array da elaborare (cosı damantenere inalterato l’originale)

determinare le permutazioni casuali dell’insieme richiestestampare le permutazioni

G. Grossi Lezione 4

Page 34: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Progettazione

Metodo top down ...

Definizione dei sottoproblemiacquisire dall’utente il numero di permutazioni richiesteeffettuare una copia dell’array da elaborare (cosı damantenere inalterato l’originale)determinare le permutazioni casuali dell’insieme richieste

stampare le permutazioni

G. Grossi Lezione 4

Page 35: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Progettazione

Metodo top down ...

Definizione dei sottoproblemiacquisire dall’utente il numero di permutazioni richiesteeffettuare una copia dell’array da elaborare (cosı damantenere inalterato l’originale)determinare le permutazioni casuali dell’insieme richiestestampare le permutazioni

G. Grossi Lezione 4

Page 36: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Copia di un array - 1

Dato l’array definito (creazione + inizializzazione) diseguito: int[] insieme = 1,2,3,4,5,6,7,8,9,10;

E’ corretto effettuare la copia nel seguente modo?int[] copiaDiInsieme = insieme;

Cosa accade in realta?int[]

10 2 3 4 5 6

insieme

copiaDiInsieme

Errore semantico! I due riferimenti puntano allo stessooggetto

G. Grossi Lezione 4

Page 37: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Copia di un array - 1

Dato l’array definito (creazione + inizializzazione) diseguito: int[] insieme = 1,2,3,4,5,6,7,8,9,10;

E’ corretto effettuare la copia nel seguente modo?int[] copiaDiInsieme = insieme;

Cosa accade in realta?int[]

10 2 3 4 5 6

insieme

copiaDiInsieme

Errore semantico! I due riferimenti puntano allo stessooggetto

G. Grossi Lezione 4

Page 38: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Copia di un array - 1

Dato l’array definito (creazione + inizializzazione) diseguito: int[] insieme = 1,2,3,4,5,6,7,8,9,10;

E’ corretto effettuare la copia nel seguente modo?int[] copiaDiInsieme = insieme;

Cosa accade in realta?

int[]

10 2 3 4 5 6

insieme

copiaDiInsieme

Errore semantico! I due riferimenti puntano allo stessooggetto

G. Grossi Lezione 4

Page 39: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Copia di un array - 1

Dato l’array definito (creazione + inizializzazione) diseguito: int[] insieme = 1,2,3,4,5,6,7,8,9,10;

E’ corretto effettuare la copia nel seguente modo?int[] copiaDiInsieme = insieme;

Cosa accade in realta?int[]

10 2 3 4 5 6

insieme

copiaDiInsieme

Errore semantico! I due riferimenti puntano allo stessooggetto

G. Grossi Lezione 4

Page 40: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Copia di un array - 2

int copiaDiInsieme[] = new int[insieme.length];for (int i=0; i < insieme.length; i++)

copiaDiInsieme[i] = insieme[i];

int[]

10 2 3 4 5 6

int[]

10 2 3 4 5 6

4 2 5 6 8 9 10

copiaDiInsieme

insieme

4 2

. . .

G. Grossi Lezione 4

Page 41: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Un corollario dell’inizializzazione

ExampleIstruzione di inizializzazione:

int i = 10;

int[] treDispari = {2*i+1,2*(i+1)+1,2*(i+2)+1};

Poiche Java inizializza esplicitamente gli array a runtime, alloraanche le espressioni possono essere usate al posto dellecostanti. Il compilatore si limita a verificare la congruenza tra iltipo delle singole espressioni con il tipo base dell’array

G. Grossi Lezione 4

Page 42: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Determinare una permutazione

Individuazione dei sottoproblemi

Prendere in esame la copia dell’array originale(modificabile a piacere secondo gli scopi)Generare una sequenza di numeri intero a casonell’intervallo [0, N − 1]: vedi il metodo randInt dellaclasse java.util.Random

Indicizzare con tale insieme l’array, copiare i numeri ivicontenuti nel nuovo array o stamparli, “marcardo” ognivolta l’elemento letto

G. Grossi Lezione 4

Page 43: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Determinare una permutazione

Individuazione dei sottoproblemiPrendere in esame la copia dell’array originale(modificabile a piacere secondo gli scopi)

Generare una sequenza di numeri intero a casonell’intervallo [0, N − 1]: vedi il metodo randInt dellaclasse java.util.Random

Indicizzare con tale insieme l’array, copiare i numeri ivicontenuti nel nuovo array o stamparli, “marcardo” ognivolta l’elemento letto

G. Grossi Lezione 4

Page 44: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Determinare una permutazione

Individuazione dei sottoproblemiPrendere in esame la copia dell’array originale(modificabile a piacere secondo gli scopi)Generare una sequenza di numeri intero a casonell’intervallo [0, N − 1]: vedi il metodo randInt dellaclasse java.util.Random

Indicizzare con tale insieme l’array, copiare i numeri ivicontenuti nel nuovo array o stamparli, “marcardo” ognivolta l’elemento letto

G. Grossi Lezione 4

Page 45: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Determinare una permutazione

Individuazione dei sottoproblemiPrendere in esame la copia dell’array originale(modificabile a piacere secondo gli scopi)Generare una sequenza di numeri intero a casonell’intervallo [0, N − 1]: vedi il metodo randInt dellaclasse java.util.Random

Indicizzare con tale insieme l’array, copiare i numeri ivicontenuti nel nuovo array o stamparli, “marcardo” ognivolta l’elemento letto

G. Grossi Lezione 4

Page 46: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Soluzione

Vedi il programma Permutazioni.java ...

N.B. Il ciclo while potrebbe essere molto inefficiente ...modificare il programma sostituendo con un ciclo for.

G. Grossi Lezione 4

Page 47: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Indice

1 Tipi numericiTipi interiTipi in virgola mobile

2 Conversioni e promozioniTipi ed espressioni

3 Array di tipi primitiviCalcolo delle permutazioniAlgebra delle matrici

G. Grossi Lezione 4

Page 48: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Array multidimensionali

Un array multidimensionale e un array i cui elementi sonoa loro volta arrayIl caso piu semplice e quello in cui gli elementi sono arraymonodimensionali. In questo caso si ottengono dellestrutture chiamate matrici (array di dimensione 2).

Esempio: matrice3x4 (3 righe e 4colonne)

0

4 7 −4

3

riga (seconda)

colonna (terza)

22−517

12 9

1 2 3

0

1

2

−2

60

G. Grossi Lezione 4

Page 49: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Array: dichiarazione e accesso0

4 7 −4

3

riga (seconda)

colonna (terza)

22−517

12 9

1 2 3

0

1

2

−2

60

Dichiarazione:int[][] matrice = new int[3][4];

Accesso all’elemento memorizzato nella seconda riga &terza colonna:int i = matrice[1][2];

Dimensioni: il numero di righe e dato da matrice.length,il numero di colonne e dato da matrice[0].length

G. Grossi Lezione 4

Page 50: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Array: dichiarazione (2)

Nella dichiarazione, una o piu dimensioni possono nonessere specificate: in questo caso gli elementicorrispondenti alle dimensioni non specificate sonoriferimenti vuoti (null)Esempio:int[][] a = new int[3][];dichiara una array di 3 elementi che sono riferimenti adarray monodimensionali di lunghezza non specificata.Sara quindi necessario inizializzare ogni elemento usandol’operatore new. Cioe:

a[0] = new int[1];a[1] = new int[7];a[2] = new int[22];

G. Grossi Lezione 4

Page 51: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Array: situazione in memoria

Un array multidimensionale viene memorizzato come unarray di array

(4)

17

−5

22

3

0

4 7 −4

322−517

12 9

1 2 3

0

1

2

−2

60

(4)(3)

(4)

4

7

−2

−4

12

0

6

9

matrice

length

G. Grossi Lezione 4

Page 52: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Array: inizializzazione

Analogamente agli array monodimensionali, anche gliarray multidimensionali possono essere inizializzati in fasedi dichiarazione

class Motto{public static void main (String args []){

char motto [][] = {{ ’E’,’s’,’t’,’o’,’t’,’e’},{ ’p’,’a’,’r’,’a’,’t’,’e’, ’.’,’.’,’.’}

};out.println (new String(motto[0]));out.println (new String(motto[1]));

}}

G. Grossi Lezione 4

Page 53: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Esercizio: somma di matrici

ProblemaScrivere un programma Java che, date due matrice di numeri,restituisca la matrice somma

G. Grossi Lezione 4

Page 54: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Esempio: somma elementi matrice

class SommaMatrice{// Somma gli elementi della matrice A

public static void main (String [] args){int[][] A = {

{1, 2, 3, 4, 5},{4, 8, 3, 2, 7},{10, 7, 3, 6, 8},{9, 2, 8, 3, 1}};

int somma=0;for (int i=0; i< A.length; i++)

for (int j=0; j< A[i].length; j++)somma += A[i][j];

out.println (somma);}

}

G. Grossi Lezione 4

Page 55: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Esercizio: prodotto di matrici

Il prodotto di matrici e illustrato come segue:date una matrice 3x4 e una 4x2 ...

x =

3 x 44 x 2

3 x 2

ProblemaScrivere un programma Java che, date due matrice di numeri,ne effettui il prodotto e lo stampi a video

G. Grossi Lezione 4

Page 56: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Le matrici

Matrice B (6x3)4 6 -3

Matrice A (4x6) 5 -1 -53 1 2 5 -6 12 0 2 7-1 1 0 -4 1 0 -8 24 20-2 5 -4 4 5 19 -4 6 119 -9 -2 33 16 0 11 -5 0

Matrice prodotto (4x3)-23 141 10033 -103 -82-15 71 33-273 851 664

G. Grossi Lezione 4

Page 57: Tipi primitivi ed array - prog.di.unimi.itprog.di.unimi.it/laboratorio/lezioni/lez04.pdf · Array di tipi primitivi Tipi interi Virgola mobile Indice 1 Tipi numerici Tipi interi Tipi

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Soluzione

Vedi il programma ProdottoMatrici.java ...

G. Grossi Lezione 4