previous next Up Title Contents Index

8.5.8 Ketjutettu kutsu


Koska funktio- aliohjelma palauttaa valmiiksi arvon, voitaisiin matka_a2.cpp:n pääohjelma kirjoittaa myös muodossa:
	  ohjeet();
	  kysy_matka(&matka_mm);
	  tulosta_matka(mittakaava_muunnos(matka_mm));
	  return 0; 
Funktioita käytetään silloin, kun aliohjelman tehtävänä on palauttaa vain yksi täsmällinen arvo. Tyypillisiä math.h- kirjaston funktioita on esim (suluissa olevat eivät ole standardin funktioita):
	(abs)   acos   asin   atan   atan2     atof  (cabs)  ceil 
	cos     cosh   exp    fabs   floor     fmod  frexp   (hypot)
	(labs)  ldexp  log    log10  (matherr) modf  (poly)   pow 
	(pow10) sin    sinh   sqrt   tan       tanh 
Funktioita käytetään kuten matematiikassa on totuttu:
	c = sqrt(a*a+b*b) + asin((sin(alpha)+0.2)/2.0); 
kysy_matka ja kysy_mittakaava voitaisiin kirjoittaa myös funktioiksi, ja tällöin niitä voitaisiin kutsua esim. seuraavasti:
	matka_km = kysy_matka()*kysy_mittakaava()/MM_KM; 
Vaarana olisi kuitenkin se, ettei voida olla aivan varmoja kumpiko funktiosta kysy_matka vai kysy_mittakaava suoritettaisiin ensin ja tämä saattaisi aiheuttaa joissakin tilanteissa yllätyksiä.

Tämän vuoksi pyrimmekin kirjoittamaan funktioiksi vain sellaiset aliohjelmat, jotka palauttavat täsmälleen yhden arvon ja jotka eivät ota muuta informaatiota ympäristöstä kuin sen mitä niille parametrina välitetään. Eli tavoitteena on se, että funktioiden kutsuminen lausekkeen osana olisi turvallista.

Muut aliohjelmat kirjoitamme siten, että arvot palautetaan osoitteen avulla. Hyvin yleinen C- tapa on kuitenkin palauttaa tällaisenkin aliohjelman onnistumista kuvaava arvo funktion nimessä (vrt. esim. scanf).

Tehtävä 8.65 math.h

Katso Turbo- C:n Help- toiminnon avulla kunkin math.h- kirjaston funktion parametrien määrä ja tyyppi sekä se mitä kukin todella tekee.

Tehtävä 8.66 Funktiot

Kirjoita edellä mainitut kysy_matka ja kysy_mittakaava nimessään arvon palauttavina funktioina.

Tehtävä 8.67 Ympyrän ala ja pallon tilavuus

Kirjoita funktiot, jotka palauttavat r- säteisen ympyrän pinta- alan ja r- säteisen pallon tilavuuden.
Kirjoita pääohjelma, jossa pinta- ala ja tilavuus - funktiot testataan.

Tehtävä 8.68 Pääohjelma yhtenä funktiokutsuna

Jatka edellä mainittua ketjuttamista siten, että koko pääohjelma on vain yksi lauseke (ohjeet- kutsu saa olla oma rivinsä jos haluat). Tosin tämä on C- hakkerismia eikä mikään tavoite helposti luettavalta ohjelmalta. Itse asiassa hyvä kääntäjä tekee automaattisesti tämän kaltaista optimointia (mitä muka voitiin säästää?).


previous next Up Title Contents Index