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

Post on 18-Feb-2019

285 views 0 download

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

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi primitivi ed array

G. Grossi

8 novembre 2006

G. Grossi Lezione 4

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

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

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

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

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

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

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

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Tipi interiVirgola mobile

Aritmetica modulare

Outputprompt> -727379968

prompt> -2147483648

prompt> 2147483647

G. Grossi Lezione 4

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tipi numericiConversioni e promozioni

Array di tipi primitivi

Array monodimensionaliArray multidimensionali

Soluzione

Vedi il programma ProdottoMatrici.java ...

G. Grossi Lezione 4