Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

5.4.5 Moniulotteiset taulukot

Yksiulotteista taulukkoa voidaan verrata rivitaloon tai ruutupaperin yhteen riviin. Kaksiulotteinen taulukko on vastaavasti kuten kapea kerrostalo tai koko ruutupaperin yksi sivu. Tarvitsemme vastaavasti useampia osoitteita (indeksejä) osoittamaan millä rivillä ja missä sarakkeessa liikumme.

Alla on esimerkki 5x7 taulukosta (P=pata, R=Risti, U=ruutu, H=hertta):


0
1
2
3
4
5
6
0
P



P



7



A


1

R

H





K

5



2


U







A




3
H
P
U
P
H
H
U

7
2
2
9
6
3
7
4


H



H



2



J

Jos taulukon nimi on peli, niin paikassa 3,1 on kortti pata 2:

	peli[3][1] = P2

Tehtävä 5.33 Kaksiulotteisen taulukon indeksit

Kirjoita kaikkien esimerkissä olevien korttien osoitteet em. muodossa.

Kaksiulotteista taulukkoa nimitetään usein matriisiksi.

Usein taulukoiden indeksit ilmoitetaan eri järjestyksessä kuin koordinaatiston (x,y)- koordinaatit. Tämä johtuu siitä ajattelutavasta, että taulukon rivi sinänsä voidaan kuvitella yhdeksi alkioksi (rivityypiksi) ja tällöin ilmaisu

	peli[3] 

tarkoittaa koko riviä (H 7, P 2, U 2, P 9, H 6, H 3, U 7), jonka indeksi on kolme. Mikäli tämän perään laitetaan vielä [1], niin tarkoitetaan ko. tietorakenteen alkiota jonka indeksi on yksi (P 2).

Tarvittaessa moniulotteiset taulukot voidaan muodostaa yksiulotteisenkin taulukon avulla. Esimerkin taulukko voitaisiin muodostaa yksiulotteisesta taulukosta siten, että yksiulotteisen taulukon 7 ensimmäistä alkiota kuvaisivat matriisin 0:ta riviä, 7 seuraavaa matriisin ensimmäistä riviä jne.

Siis mikäli yksiulotteisen taulukon nimi olisi pakka, niin voisimme käyttää samaistuksia:

	peli[3][1] = pakka[7*3+1]
	peli[j][i] = pakka[7*j+i] 

Olemme siis numeroineet kaksiulotteisen taulukon alkiot juoksevasti. Voimmehan tehdä näin myös kerrostalon huoneistoille tai teatterin istumapaikoille.

Taulukot voivat olla myös useampiulotteisia, esimerkiksi 3x4x5 taulukko:

	   0        1        2        3       4 
	  +--+     +--+     +--+     +--+    +--+2 
	0 | +--+   | +--+   | +--+   | +--+  | +--+1 
	  +-| +--+ +-| +--+ +-| +--+ +-| +--++-| +--+0 
	    +-|  |   +-|PJ|   +-|  |   +-|  |  +-|  | 
	      +--+     +--+     +--+     +--+    +--+ 
	  +--+     +--+     +--+     +--+     +--+     
	1 | +--+   | +--+   |R5--+   | +--+   | +--+   
	  +-| +--+ +-| +--+ +-| +--+ +-|HA--+ +-| +--+ 
	    +-|  |   +-|  |   +-|  |   +-|  |   +-|  | 
	      +--+     +--+     +--+     +--+     +--+ 
	  +--+     +--+     +--+     +--+     +--+      
	2 | +--+   | +--+   | +--+   | +--+   | +--+    
	  +-| +--+ +-| +--+ +-| +--+ +-| +--+ +-| +--+  
	    +-|  |   +-|  |   +-|  |   +-|  |   +-|  |  
	      +--+     +--+     +--+     +--+     +--+  
	  +--+     +--+     +--+     +--+     +--+      
	3 |P7--+   | +--+   | +--+   | +--+   | +--+    
	  +-| +--+ +-| +--+ +-| +--+ +-| +--+ +-| +--+  
	    +-|  |   +-|  |   +-|  |   +-|  |   +-|  |  
	      +--+     +--+     +--+     +--+     +--+  
	
	isopeli[0][0][1]=PJ
	isopeli[2][1][2]=R5
	isopeli[1][1][3]=HA
	isopeli[2][3][0]=P7

Tehtävä 5.34 Sijoitus 3- ulotteiseen taulukkoon

Esitä 5 muuta sijoitusta taulukkoon.

Tehtävä 5.35 3- ulotteinen taulukko 1- ulotteiseksi

Esitä kaava miten edellä oleva 3- ulotteinen taulukko voitaisiin esittää yksiulotteisella taulukolla.

Aikaisempi satunnaisen matkaajan sanastomme on oikeastaan myös kolmiulotteinen taulukko:

	     0        1        2
	0  minä      jag       i
	1  sinä      du        you
	2  hän       han       he
	

Se on kaksiulotteinen taulukko sanoista. Mitä sitten yksi sana on? Se on yksiulotteinen taulukko kirjaimista!

	    0        1        2        3       4 
	   +--+     +--+     +--+     +--+    +--+2      
	 0 |h+--+   |ä+--+   |n+--+   | +--+  | +--+1    
	   +-|s+--+ +-|i+--+ +-|n+--+ +-|ä+--++-| +--+0  
	     +-|m |   +-|i |   +-|n |   +-|ä |  +-|  |   
	       +--+     +--+     +--+     +--+    +--+   
	   +--+     +--+     +--+     +--+    +--+2      
	 1 |h+--+   |a+--+   |n+--+   | +--+  | +--+1    
	   +-|d+--+ +-|u+--+ +-| +--+ +-| +--++-| +--+0  
	     +-|j |   +-|a |   +-|g |   +-|  |  +-|  |   
	       +--+     +--+     +--+     +--+    +--+   
	   +--+     +--+     +--+     +--+    +--+2      
	 2 |h+--+   |e+--+   | +--+   | +--+  | +--+1    
	   +-|y+--+ +-|o+--+ +-|u+--+ +-| +--++-| +--+0  
	     +-|i |   +-|  |   +-|  |   +-|  |  +-|  |   
	       +--+     +--+     +--+     +--+    +--+   

Siis " you" sanan indeksi on [1][2] ja sen kirjaimen "y" indeksi on [0]. Siis kaiken kaikkiaan " you"- sanan "y"-kirjaimen indeksi olisi [1][2][0].

Taulukko voitaisiin järjestää 3- ulotteiseksi myös toisinkin. Esimerkiksi yhdessä "tasossa" olisi yksi kieli jne.

Tehtävä 5.36 3- ulotteinen taulukko

Esitä edellisessä esimerkissä kaikkien kirjainten indeksit.
Millaisella yhden kirjaimen sijoituksella muuttaisit sanan " han" sanaksi " hon"?

Tehtävä 5.37 4- ulotteinen taulukko

Mitenkä tavallinen kirja voitaisiin kuvitella 3- ulotteiseksi taulukoksi?
Miten kirja voitaisiin kuvitella 4- ulotteiseksi taulukoksi?
Piirrä edellisiin perustuen esimerkki 4- ulotteisesta taulukosta ja anna muutama esimerkkisijoitus.

Osoitinmuuttuja osoittaisi myös moniulotteisessa taulukossa yhteen alkioon kerrallaan. Esimerkiksi osoittamalla " you"- sanan "y"-kirjaimeen.

Moniulotteisen ja yksiulotteisen taulukon väliset muunnokset ovat tärkeitä, koska tietokoneen muisti (1997) on lähes aina yksiulotteinen. Siis loogisesti moniulotteiset taulukot joudutaan lopulta aina toteuttamaan yksiulotteisina. Onneksi useat kielet sisältävät moniulotteiset taulukot tietotyyppinä ja kääntäjät tekevät sitten muunnoksen. Tästä huolimatta esimerkiksi C- kielessä joudutaan usein muuttamaan moniulotteisia taulukoita yksiulotteisiksi.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys