<< Chapter < Page Chapter >> Page >

Matrici

Qualsiasi tipo si può usare come tipo base per un array ( int , float , string , ecc.). In particolare, un array può essere tipo base per un array, in questo modo consentendo di fare arraydi array, o array bidimensionali.Un array bidimensionale si dichiara e si istanzia con int[][]A = new int[ROWS][COLUMNS]; dove ROWS e COLUMNS conterranno i numeri di righe e colonne che si vogliono riservare per l'array.Ogni riga è essa stessa un array, al quale si può accedere con A[i] , mentre all'elemento di riga i e colonna j si accede con A[i][j] , che in questo caso è una variabile di tipo int . Questa volta A.length restituisce il numero di righe dell'array, mentre il numero di colonne si può conoscerecon A[0].length .

Un array, mono- o bi-dimensionale, può essere inizializzato all'atto della creazione. Nel caso di un array a 3 righe e 4colonne ciò si può fare con int[][] A = { { 1, 0, 12, -1 }, { 7, -3, 2, 5 }, { -5, -2, 2, -9 } };

Così come gli array monodimensionali vengono scanditi agevolmente con un ciclo for , così gli array bidimensionali vengono scanditi con due cicli for annidati, uno che scandisce le righe e uno che scandisce le colonne: for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLUMNS; j++) { A[i][j] = ... } } Ad esempio, nel codice seguente viene inizializzato un array bidimensionale di colori, e successivamente questa tavolozzadi colori viene visualizzata. int ROWS = 4; int COLUMNS = 4; color[][] grid = new color[ROWS][COLUMNS]; for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLUMNS; col++) { grid[row][col] = color(row*60, 0, col*60); } } for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLUMNS; col++) { fill(grid[row][col]); rect(row*25, col*25, 25, 25); } }

Si visualizzi una tavolozza di 4x4 colori che ruota in senso orizzontale, come se fosse la superficie di uncilindro che ruota intorno all'asse verticale.

int ROWS = 4; int COLUMNS = 4; color[][] grid = new color[ROWS][COLUMNS]; int step; void setup(){ for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLUMNS; col++) { grid[row][col] = color(row*60, 0, col*60); } frameRate(5); noStroke(); } for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLUMNS; col++) { fill(grid[row][col]); rect(row*25, col*25, 25, 25); } } } void draw(){ for (int row = 0; row < ROWS; row++) { for (int col = 0; col < COLUMNS; col++) { fill(grid[(row+step)%COLUMNS][col]); rect(row*25, col*25, 25, 25); } } step = (step+1)%COLUMNS; }

Gli array multidimensionali di tipo float o double sono utilizzati in moltissimi contesti, in quanto sono di supporto alla Aritmetica delle Matrici . Questa aritmetica consente di rappresentare ed effettuare in manieracompatta operazioni su array di numeri. Ad esempio, per invertire l'ordine dei numeri di un array di 4 elementi èsufficiente pre-moltiplicarlo per una matrice 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 oppure, per scambiare i numeri in posizione pari con quelli in posizione dispari si può usare la matrice 0 1 0 0 1 0 0 0 0 0 0 1 0 0 1 0

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Programmazione di artefatti interattivi. OpenStax CNX. Dec 09, 2010 Download for free at http://cnx.org/content/col10417/1.9
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?

Ask