...
- Toisaalta on olemassa valmiita kirjastofunktioita, jotka ovat kaikkien ohjelmoijien käytössä.
- Toisaalta jokainen ohjelmoija voi kirjoittaa funktioita omaan käyttöönsä.
Funktion syntaksi
Funktion täydellinen nimi koostuu kolmesta asiasta:
- paluuarvon tyyppistä (pakollinen!)
- funktion nimestä (pakollinen!)
- parametreista (ei pakollisia, riippuu funktiosta)
Funktiotyypit
Funktioita voidaan tehdä erilaisia:
...
Code Block |
---|
funktion_paluuarvon_tyyppi funktion_nimi(
param_1_tyyppi parametri_1,
param_2_tyyppi parametri_2,
/* loput parametrit, jos on */)
|
Funktiotyypit
Funktioita voidaan tehdä erilaisia:
Anchor | ||||
---|---|---|---|---|
|
Esimerkki 1
Seuraavassa esimerkissä funktio laskee kartion tilavuuden, funktion alussa esitellään ne muuttujat (tietovarastot), joita ohjelma tarvitsee.
Code Block |
---|
void KartionTilavuus()
{
float Sade, Korkeus, Tilavuus; |
...
Esimerkki 1
Seuraavassa esimerkissä funktio laskee kartion tilavuuden, funktion alussa esitellään ne muuttujat (tietovarastot), joita ohjelma tarvitsee.
Code Block |
---|
void KartionTilavuus() { float Sade, Korkeus, Tilavuus; // esitellään muuttujat system("cls"); // putsataan ruutu printf("Lasken kartion tilavuuden"); // annetaanesitellään ohjeita käyttäjälle printf("Anna pohjan säde:");muuttujat scanfsystem("%fcls", &Sade); // kysytäänputsataan tietoa käyttäjältäruutu printf("Anna korkeus:"); scanf("%f", &Korkeus); Tilavuus = 3.14159 * Sade*Sade*Korkeus/3; // lasketaan ja sijoitetaanLasken kartion tilavuuden"); // annetaan ohjeita käyttäjälle printf("TilavuusAnna on %5.2f", Tilavuus); } |
Edellinen ohjelma laskee kartion tilavuuden ja tulostaa tiedot ruudulle, muttei pysty välittämään tietoa muille funktioille. Muuttujat Sade
, Korkeus
ja Tilavuus
ovat tämän funktion muuttujia eli tiedon säilömispaikkoja.
Funktion kutsuminen
Funktiota kutsutaan muodossa funktion_nimi() ja sulkujen sisään tulevat mahdolliset parametrit.
Esim funktion kutsuminen pääohjelmasta:
Code Block |
---|
int main()pohjan säde:"); scanf("%f", &Sade); // kysytään tietoa pääohjelmakäyttäjältä { KartionTilavuus(printf("Anna korkeus:"); // funktion kutsu scanf("%f", &Korkeus); getch(); Tilavuus = 3.14159 * Sade*Sade*Korkeus/3; // lasketaan ja sijoitetaan // jäädään odottamaan, että käyttäjä painaa jotain nappulaa } |
Note |
---|
Funktiota voidaan kutsua sen mistä tahansa ohjelmasta, myös funktiosta itsestään (vrt. rekursio). |
Funktion parametrit
Funktioon voidaan sen käynnistyessä viedä tietoa ja se voi päätyttyään palauttaa kutsujalleen tietoa. Tieto viedään parametrien avulla ja palautetaan return
-käskyllä. Tietoa voidaan palauttaa myös parametreissa (kts. Osoittimet).
Funktion syntaksi
Funktion täydellinen nimi koostuu kolmesta asiasta:
- paluuarvon tyyppistä
- funktion nimestä
- parametreistä
...
printf("Tilavuus on %5.2f", Tilavuus);
}
|
Edellinen ohjelma laskee kartion tilavuuden ja tulostaa tiedot ruudulle, muttei pysty välittämään tietoa muille funktioille. Muuttujat Sade
, Korkeus
ja Tilavuus
ovat tämän funktion muuttujia eli tiedon säilömispaikkoja.
Funktion kutsuminen
Funktiota kutsutaan muodossa funktion_nimi() ja sulkujen sisään tulevat mahdolliset parametrit.
Esim funktion kutsuminen pääohjelmasta:
Code Block |
---|
int main() // pääohjelma
{
KartionTilavuus(); // funktion kutsu
getch(); // jäädään odottamaan, että käyttäjä painaa jotain nappulaa
}
|
Note |
---|
Funktiota voidaan kutsua sen mistä tahansa ohjelmasta, myös funktiosta itsestään (vrt. rekursio). |
...
Funktion parametrit
Funktioon voidaan sen käynnistyessä viedä tietoa ja se voi päätyttyään palauttaa kutsujalleen tietoa. Tieto viedään parametrien avulla ja palautetaan return
-käskyllä. Tietoa voidaan palauttaa myös parametreissa (kts. Esimerkki 6 ja Osoittimet).
Anchor | ||||
---|---|---|---|---|
|
Esimerkki 2
...
Paluuarvona ei saa palauttaa esimerkiksi osoitteita paikallisiin muuttujiin, koska ne häviävät funktion päättymisen jälkeen.
...
Funktio ja osoiteparametrit
Kun funktion pitää muuttaa muuttujan arvoa kutsuvassa ohjelmassa, pitää muuttujasta välittää sen osoite eikä muuttujan arvoa.
Esimerkki 6
Anchor | ||||
---|---|---|---|---|
|
Code Block |
---|
void LaskeYhteen(int Eka, int Toka, int *Summa) { *Summa = Eka + Toka; // * summan edessä aiheuttaa sen ettei osiotteen arvoa muuteta, vaan osoittimen osoittaman muistipaikan sisältö } void main() // pääohjelma { int First=5, Second=8, Sum=0; LaskeYhteen(First, Second, &Sum); // välitetään yhteenlaskettavat arvoparametreina ja summa osoiteparametrina, // jotta summa saadan muutettua nollasta haluttuun arvoon kutsuttavassa funktiossa printf("\nsumma on %d", Sum); getch(); } |
...