Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • 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:

  1. paluuarvon tyyppistä (pakollinen!)
  2. funktion nimestä (pakollinen!)
  3. 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
esim1
esim1

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
esim2
esim2

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
esim6
esim6

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();
}

...