Kirjoitetaan funktio, jolla tulostetaan tuotteen alennettu hinta, kun alkutietoina annetaan alkuperäinen hinta ja alennus prosentteina.
Koska funktion halutaan käsittelevän kutsuvassa yksikössä määriteltyä tietoa, täytyy käsiteltäväksi aiottu tieto välittää funktiolle parametrilistan avulla. Parametrilistassa esitellään kaikki käsiteltäviksi aiotut tietoalkiot.
/* ********************************************************* FUNKTIO2.CPP Esimerkki funktiosta, jolla ei ole paluuarvoa, mutta jolla on parametreja. ********************************************************* */ #include <iostream.h> #include <stdio.h> /* Laskee ja tulostaa näytölle tuotteen alehinnan. Parametreina tuodaan ovh ja ale-prosentti. */ void tulosta_ale(double hinta, double ale) { double ale_hinta; ale_hinta = hinta - (ale/100.0)*hinta; printf("\n"); printf("Lähtöhinta %7.2lf mk\n", hinta); printf("Alennus %7.2lf %%\n", ale); printf("Ale-hinta %7.2lf mk\n", ale_hinta); } int main(void) { double hinta, alennus; cout << "\n\n"; cout << "Anna tavaran hinta > "; cin >> hinta; cout << "Anna alennus-% > "; cin >> alennus; tulosta_ale(hinta, alennus); return 0; }
Esimerkkiajo:
Anna tavaran hinta > 250 Anna alennus-% > 10 Lähtöhinta 250.00 mk Alennus 10.00 % Ale-hinta 225.00 mk
Funktion määrittelyssä parametrien tyypit mainitaan aina nimien edessä:
void tulosta_ale(double hinta, double ale)
Funktiomäärittelyn otsikko-osa (yllä oleva) ei ole lause, joten sen loppuun ei tule puolipistettä. Funktion kutsu sen sijaan on lause.
Kun funktiota kutsutaan, täytyy kutsussa olla yhtä monta argumenttia kuin funktion esittelyssä on parametreja. Esimerkiksi edellisessä täytyy funktiota tulosta_ale kutsua kahdella kaksoistarkkuuden liukulukuargumentilla. Kutsussa ei tyyppejä kirjoiteta:
tulosta_ale(hinta, alennus);
Kutsuun laitettujen lausekkeiden (tässä muuttujien) arvot kopioituvat funktiossa määriteltyihin muuttujiin. Siis pääohjelman muuttuja hinta ja funktion tulosta_ale muuttuja hinta ovat kaksi erillistä muuttujaa, vaikka niillä sattuukin olemaan sama nimi. Koska molemmat ovat lokaaleja muuttujia ja näkyvät näin ollen vain siinä lohkossa (funktiossa), jossa ne on määritelty, ei tilanteessa ole mitään ristiriitaa.
Funktiota tulosta_ale voitaisiin kutsua myös vakioarvoja käyttämällä:
tulosta_ale(120, 33);
Tällöin funktiota kutsuttaessa ko. lukuarvot kopioituvat funktion paikallisiin muuttujiin hinta ja ale.