Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

13.3.4 Taulukko viitteistä

Se että matriisi onkin vain taulukko viitteistä riveihin, mahdollistaa edellä olleen mielivaltaisen kokoisen matriisin käyttämisen aliohjelman parametrina. Matriisin rivit voidaan luoda myös erikseen:

mat-+      mat[0]         +---------- mat[0][2]
    |      |              |      
    |      |               
    v      +--->+---------------+
  +---+   +---->| 1 | 2 | 3 | 4 |  r0
0 | o-+---+     +---------------+ 
  +---|         +---------------+
1 | o-+-------->| 5 | 6 | 7 | 8 |  r1
  +---|         +---------------+ 
2 | o-+---+     +---------------+
  +---+   +---->| 9 | 0 | 1 | 2 |  r2
                +---------------+ 

java-taul\Mat3.java - matriisi osoitintaulukon avulla

	/**
	 * Matriisi kasattuna irrallisista riveistä
	 * @author Vesa Lappalainen
	 * @version 1.0, 04.03.2003
	 */
	public class Mat3 {
	
	  public static double alkioiden_summa(double mat[][],int riveja, int sarakkeita) {
	    int riv = Math.min(riveja,mat.length);
	    double summa = 0;
	    for (int i=0; i<riv; i++) {
	      int sar = Math.min(sarakkeita,mat[i].length);
	      for (int j=0; j<sar; j++)
	        summa += mat[i][j];
	    }
	    return summa;
	  }
	
	  public static void main(String[] args) {
	    double s1,s2;
	    double r0[] = {1,2,3,4}, r1[] = {5,6,7,8}, r2[] = {9,0,1,2};
	    double mat[][] = {r0,r1,r2};
	    s1 = alkioiden_summa(mat,2,3);
	    s2 = alkioiden_summa(mat,3,4);
	    System.out.println("Summat on " + s1 + " ja " + s2);
	
	  }
	}

Javan menettelyssä on vielä se etu, ettei kaikkien rivien välttämättä tarvitsisi edes olla yhtä pitkiä. Harvassa matriisissa osa osoittimista voisi olla jopa null- osoittimia, mikäli rivillä ei ole alkioita (aliohjelman pitäisi tietysti tarkistaa tämä). Oikeasti rivit usein vielä luotaisiin dynaamisesti ajonaikana tarvittavan pituisina.

Tehtävä 13.4 Transpoosi

Kirjoita taulukko- osoittimia käyttäen aliohjelma, joka saa parametrinään kaksi matriisia ja niiden dimensiot. Aliohjelma tarkistaa voiko toiseen matriisiin tehdä toisen transpoosin (vaihtaa rivit ja sarakkeet keskenään) ja tekee transpoosin jos pystyy. Onnistuminen palautetaan aliohjelman nimessä.

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys