17.11.2014 Views

Array Bidimensionali in Java Esempi di Elaborazioni su Matrici

Array Bidimensionali in Java Esempi di Elaborazioni su Matrici

Array Bidimensionali in Java Esempi di Elaborazioni su Matrici

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

10110<br />

01100<br />

01011<br />

Fondamenti <strong>di</strong> Informatica<br />

<strong>Array</strong> <strong>Bi<strong>di</strong>mensionali</strong> <strong>in</strong> <strong>Java</strong><br />

<strong>Esempi</strong> <strong>di</strong> <strong>Elaborazioni</strong> <strong>su</strong> <strong>Matrici</strong><br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 1<br />

10110<br />

01100<br />

01011<br />

Oggetti e array bi<strong>di</strong>mensionali<br />

• Sviluppiamo un programma <strong>Java</strong> che effettua elaborazioni <strong>su</strong><br />

matrici.<br />

• Il programma è composto da due classi:<br />

• Matrice<br />

• UsaMatrice.<br />

• La classe Matrice def<strong>in</strong>isce oggetti che sono matrici<br />

bi<strong>di</strong>mensionali <strong>di</strong> valori <strong>in</strong>teri con i meto<strong>di</strong> leggi, stampa,<br />

copia, estrai, sommariga e sommacolonna.<br />

• La classe def<strong>in</strong>isce un costruttore Matrice per creare matrici<br />

con <strong>di</strong>mensioni <strong>di</strong> volta <strong>in</strong> volta <strong>di</strong>verse.


10110<br />

01100<br />

01011<br />

Oggetti e array bi<strong>di</strong>mensionali<br />

• La classe UsaMatrice def<strong>in</strong>isce il ma<strong>in</strong> che usa la<br />

classe Matrice, creando oggetti Matrice e<br />

<strong>in</strong>vocando i meto<strong>di</strong> pubblici della classe.<br />

• Dopo aver creato un oggetto Matrice, il ma<strong>in</strong>:<br />

• Assegna i valori ai vari elementi leggendoli dalla tastiera,<br />

• Stampa la matrice,<br />

• Stampa il valore m<strong>in</strong>imo e massimo delle somme delle righe<br />

e delle colonne della matrice stessa.<br />

• Qu<strong>in</strong><strong>di</strong> fa una copia della matrice ed estrae da essa una<br />

sottomatrice arbitraria tramite il metodo estrai.<br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 3<br />

10110<br />

01100<br />

01011<br />

Classe Matrice<br />

/* Classe Matrice che def<strong>in</strong>isce oggetti matrici<br />

bi<strong>di</strong>mensionali <strong>di</strong> valori <strong>in</strong>teri con i meto<strong>di</strong> costruttore,<br />

leggi, stampa, copia, estrai, sommariga e sommacolonna.*/<br />

class Matrice<br />

{<br />

private <strong>in</strong>t[][] mat;<br />

/* la variabile <strong>di</strong> istanza è una<br />

matrice a due <strong>di</strong>mensioni */<br />

Matrice(<strong>in</strong>t nrig, <strong>in</strong>t ncol)<br />

{<br />

mat = new <strong>in</strong>t[nrig][ncol];<br />

}<br />

// il metodo costruttore<br />

public void leggi(<strong>in</strong>t nr, <strong>in</strong>t nc)<br />

{<br />

<strong>in</strong>t i, j;<br />

// metodo <strong>di</strong> lettura<br />

for(i=0; i


10110<br />

01100<br />

01011<br />

Classe Matrice<br />

/* metodo per vi<strong>su</strong>alizzare la matrice */<br />

public void stampa(<strong>in</strong>t nr, <strong>in</strong>t nc)<br />

{<br />

<strong>in</strong>t i, j;<br />

for(i=0; i


10110<br />

01100<br />

01011<br />

Classe UsaMatrice<br />

/* La classe seguente def<strong>in</strong>isce il ma<strong>in</strong> che usa la classe<br />

Matrice, creando oggetti Matrice e <strong>in</strong>vocando i meto<strong>di</strong><br />

pubblici della classe.<br />

class UsaMatrice<br />

{<br />

public static void ma<strong>in</strong> (Str<strong>in</strong>g args[])<br />

{<br />

<strong>in</strong>t numr;<br />

<strong>in</strong>t numc = 5;<br />

Matrice mat1, mat2, mat3;<br />

<strong>in</strong>t sc, sr;<br />

<strong>in</strong>t m<strong>in</strong>sommarig, m<strong>in</strong>sommacol;<br />

<strong>in</strong>t maxsommarig, maxsommacol;<br />

<strong>in</strong>t ri, rf, ci, cf;<br />

<strong>in</strong>t rig, col;<br />

numr = Console.readInt("Inserire numero righe: ");<br />

numc = Console.readInt("Inserire numero colonne: ");<br />

mat1 = new Matrice(numr,numc);<br />

mat1.leggi(numr,numc);<br />

mat1.stampa(numr,numc);<br />

. . . . . . . . . //cont<strong>in</strong>ua<br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 7<br />

10110<br />

01100<br />

01011<br />

Classe UsaMatrice<br />

m<strong>in</strong>sommarig=mat1.sommariga(0);<br />

for (<strong>in</strong>t i=1; i= sr)<br />

m<strong>in</strong>sommarig = sr;<br />

}<br />

System.out.pr<strong>in</strong>tln("m<strong>in</strong>imo tra le somme delle righe= " +<br />

m<strong>in</strong>sommarig);<br />

m<strong>in</strong>sommacol=mat1.sommacolonna(0);<br />

for (<strong>in</strong>t j=1; j= sc)<br />

m<strong>in</strong>sommacol = sc;<br />

}<br />

System.out.pr<strong>in</strong>tln("m<strong>in</strong>imo tra le somme delle colonne= " +<br />

m<strong>in</strong>sommacol);<br />

. . . . . . . . . //cont<strong>in</strong>ua


10110<br />

01100<br />

01011<br />

Classe UsaMatrice<br />

maxsommarig=mat1.sommariga(0);<br />

for (<strong>in</strong>t i=1; i


10110<br />

01100<br />

01011<br />

<strong>Array</strong> bi<strong>di</strong>mensionali<br />

• Lo stesso programma <strong>Java</strong> che effettua elaborazioni <strong>su</strong> matrici<br />

senza def<strong>in</strong>ire oggetti si può sviluppare come composto da una<br />

sola classe Matrice.<br />

• La classe Matrice def<strong>in</strong>isce array bi<strong>di</strong>mensionali <strong>di</strong> valori <strong>in</strong>teri<br />

che non sono oggetti ed i meto<strong>di</strong> (statici) leggi, stampa,<br />

copia, estrai, sommariga e sommacolonna.<br />

• La classe def<strong>in</strong>isce al <strong>su</strong>o <strong>in</strong>terno anche il ma<strong>in</strong>.<br />

• Il programma è simile al precedente ma non usa oggetti e<br />

meto<strong>di</strong> <strong>di</strong> istanza, ma variabili e meto<strong>di</strong> <strong>di</strong> classe (statici).<br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 11<br />

10110<br />

01100<br />

01011<br />

Oggetti e array bi<strong>di</strong>mensionali<br />

• Il metodo ma<strong>in</strong> crea array bi<strong>di</strong>mensionali e <strong>in</strong>voca i<br />

meto<strong>di</strong> della classe per effettuare elaborazioni <strong>su</strong>lle<br />

matrici.<br />

• Dopo aver creato un array mat1,<br />

• legge i valori dei vari elementi,<br />

• stampa la matrice,<br />

• stampa il valore m<strong>in</strong>imo e massimo delle somme delle righe<br />

e delle colonne della matrice,<br />

• qu<strong>in</strong><strong>di</strong> fa una copia della matrice mat1 <strong>in</strong> mat2 ed estrae<br />

da essa una sottomatrice arbitraria mat3 tramite il metodo<br />

statico estrai.


10110<br />

01100<br />

01011<br />

Classe Matrice (2)<br />

public class Matrice<br />

{<br />

public static void leggi(<strong>in</strong>t[][] mat, <strong>in</strong>t nr, <strong>in</strong>t nc)<br />

{<br />

<strong>in</strong>t i, j;<br />

for(i=0; i


10110<br />

01100<br />

01011<br />

Classe Matrice (2)<br />

public static <strong>in</strong>t sommacolonna(<strong>in</strong>t[][] mat, <strong>in</strong>t ic)<br />

{<br />

<strong>in</strong>t i, sommac=0;<br />

}<br />

for (i=0; i < mat.length; i++)<br />

sommac = sommac + mat[i][ic];<br />

return sommac;<br />

/* Inizio del metodo ma<strong>in</strong> */<br />

public static void ma<strong>in</strong> (Str<strong>in</strong>g args[])<br />

{<br />

<strong>in</strong>t numr;<br />

<strong>in</strong>t numc = 5;<br />

<strong>in</strong>t [][] mat1, mat2, mat3; /* matrici a due <strong>di</strong>mensioni */<br />

<strong>in</strong>t sc, sr;<br />

<strong>in</strong>t m<strong>in</strong>sommarig, m<strong>in</strong>sommacol;<br />

<strong>in</strong>t maxsommarig, maxsommacol;<br />

<strong>in</strong>t ri, rf, ci, cf;<br />

<strong>in</strong>t rig, col;<br />

//cont<strong>in</strong>ua<br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 15<br />

10110<br />

01100<br />

01011<br />

Classe Matrice (2)<br />

numr = Console.readInt("Inserire numero righe: ");<br />

numc = Console.readInt("Inserire numero colonne: ");<br />

mat1 = new <strong>in</strong>t[numr][numc];<br />

leggi(mat1, numr,numc);<br />

stampa(mat1, numr,numc);<br />

m<strong>in</strong>sommarig=sommariga(mat1, 0);<br />

for (<strong>in</strong>t i=1; i= sr)<br />

m<strong>in</strong>sommarig = sr;<br />

}<br />

System.out.pr<strong>in</strong>tln("m<strong>in</strong>imo tra le somme delle righe = "<br />

+ m<strong>in</strong>sommarig);<br />

//cont<strong>in</strong>ua


10110<br />

01100<br />

01011<br />

Classe Matrice (2)<br />

m<strong>in</strong>sommacol=sommacolonna(mat1, 0);<br />

for (<strong>in</strong>t j=1; j= sc)<br />

m<strong>in</strong>sommacol = sc;<br />

}<br />

System.out.pr<strong>in</strong>tln("m<strong>in</strong>imo tra le somme delle colonne = “<br />

+ m<strong>in</strong>sommacol);<br />

maxsommarig=sommariga(mat1, 0);<br />

for (<strong>in</strong>t i=1; i


10110<br />

01100<br />

01011<br />

<strong>Matrici</strong> <strong>in</strong> <strong>Java</strong><br />

• Per estendere i meto<strong>di</strong> della classe Matrice bisognerebbe:<br />

- Inserire un metodo per il calcolo dei valori me<strong>di</strong> <strong>di</strong> ogni riga e<br />

ogni colonna della matrice.<br />

- Inserire un metodo per estrarre una matrice quadrata.<br />

- Inserire un metodo per il calcolo della <strong>di</strong>agonale.<br />

- Mo<strong>di</strong>ficare il metodo estrai per controllare gli <strong>in</strong><strong>di</strong>ci forniti.<br />

- Def<strong>in</strong>ire i meto<strong>di</strong> <strong>di</strong> somma e prodotto tra matrici<br />

- …………<br />

• Per estendere il programma ma<strong>in</strong> si potrebbe<br />

- Usare i meto<strong>di</strong> per effettuare operazioni più complesse <strong>su</strong>lle<br />

matrici.<br />

- …………<br />

Fondamenti <strong>di</strong> Informatica - D. Talia - UNICAL 19

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!