Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

8.6.1 Useita parametrejä

Kaikissa edellisissä esimerkeissämme meillä on ollut vain 0 tai yksi parametriä välitettävänä aliohjelmaan. Käytännössä usein tarvitsemme useampia parametrejä. Esimerkiksi edellisessä paamenu- aliohjelmassa pitäisi oikeastaan tulostaa myös kerhon nimi. Emme vielä kuitenkaan osaa käsitellä merkkijonoja, joten palaamme tähän ongelmaan myöhemmin.

Ottakaamme esimerkiksi mittakaava_muunnos - funktio. Mikäli ohjelma haluttaisiin muuttaa siten, että myös mittakaavaa olisi mahdollista muuttaa, pitäisi myös mittakaava voida välittää muunnos- aliohjelmalle parametrinä. Kutsussa tämä voisi näyttää esim. tältä:

	  matka_km = mittakaava_muunnos(10000.0,32); 

Vastaavasti funktio- esittelyssä täytyisi olla kaksi parametriä:

	double mittakaava_muunnos(double mittakaava,int matka_mm)
	{
	  return matka_mm*mittakaava/MM_KM;
	}

Kun kutsu suoritetaan, välitetään aliohjelmalle parametrit siinä järjestyksessä, missä ne on esitelty. Voitaisiin siis kuvitella aliohjelmakutsun aiheuttavan sijoitukset aliohjelman parametrimuuttujiin (tosin sijoitusjärjestystä ei taata, eli ei tiedetä kumpi sijoitus suoritetaan ensin):

	mittakaava = 10000.0;
	matka_mm   = 32; 

Jos kutsu on muotoa

	  matka_km = mittakaava_muunnos(MITTAKAAVA,matka_mm); 

kuvitellaan sijoitukset:

	mittakaava = MITTAKAAVA; /* Ohjelman vakio                */
	matka_mm   = matka_mm;   /* Pääohjelman muuttuja matka_mm */

Siis vaikka kutsussa ja esittelyssä esiintyykin sama nimi, ei nimien samuudella ole muuta tekemistä kuin mahdollisesti se, että turha on väkisinkään keksiä lyhennettyjä huonoja nimiä, jos kerran on hyvä nimi keksitty kuvaamaan jotakin asiaa.

Parametreistä osa, ei yhtään tai kaikki voivat olla myös osoitteita tai referenssejä.

Huom! Vaikka kaikilla aliohjelman parametreille olisikin sama tyyppi, täytyy jokaisen parametrin tyyppi mainita silti erikseen:

	double nelion_ala(double korkeus, double leveys) 

Tehtävä 8.69 Toisen asteen yhtälön juuri

Kirjoita funktio root_1(a,b,c), joka palauttaa jomman kumman toisen asteen yhtälön ax2+bx+c=0 juurista (oletetaan tällä kertaa, että a<>0 ja D = b 2- 4ac >= 0. Miksi oletetaan?).

Tehtävä 8.70 Toisen asteen polynomi, root_1

Kirjoita funktio root_1 joka palauttaa toisen asteen polynomin P(x) = ax 2+bx+c arvon (muista viedä parametrinä myös a,b ja c).

Tehtävä 8.71 root_1 testaus

Kirjoita pääohjelma, jolla voidaan testata root_1 - aliohjelma (jotenkin myös se, että tulos toteuttaa yhtälön).

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys