Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

...

Code Block
void KartionTilavuus()
{
    float Sade, Korkeus, Tilavuus;            // esitellään funktion paikalliset muuttujat

    system("cls");                            // putsataan ruutu
    printf("Lasken kartion tilavuuden");      // annetaan ohjeita käyttäjälle
    printf("Anna pohjan säde:");
    scanf("%f", &Sade);                       // kysytään tietoa käyttäjältä

    printf("Anna korkeus:");
    scanf("%f", &Korkeus);

    Tilavuus = 3.14159 * Sade*Sade*Korkeus/3; // lasketaan ja sijoitetaan
    printf("Tilavuus on %5.2f", Tilavuus);
}

...

Note

Funktiota voidaan kutsua sen mistä tahansa ohjelmasta, myös funktiosta itsestään (vrt. rekursio).

...

Funktion parametrit ja paikalliset muuttujat

Kaikilla funktiolla voi olla omia paikallisia (local) muuttujia. Lisäksi funktiolla voi olla parametreja, joiden avulla funktiolle välitetään tietoa sen ulkopuolelta. Parametrit eroavat paikallisista muuttujista siinä, että niille on annettu alkuarvo funktion kutsussa.

...

Code Block
void TulostaMerkkifunktio(charint Merkkix)
{
    int y;
    ...
}
  • x on funktion parametri ja y funktion paikallinen muuttuja. On huomattava, että parametrit ja paikalliset muuttujat eivät näy funktion ulkopuolelle eivätkä siten ole käytettävissä muualla kuin funktiossa itsessään.
  • On myös tärkeää huomata, että eri funktioissa voi olla samannimisiä muuttujia ja ne ovat toisistaan täysin riippumattomia.
    Anchor
    esim2
    esim2

Esimerkki 2

Code Block

void TulostaMerkki(char Merkki)               // funktion parametrina char tyyppinen muuttuja
{
    printf("Antamasi merkki oli %c", Merkki); // tulostetaan annettu merkki %c:n osoittamaan kohtaan
}

int main()
{
    char JokinMerkki = 'a';      // esitelläänfunktion muuttuja,parametrina nytchar paikallisena, nyt muutuja näkyy vain tässä funktiossa
    TulostaMerkki(JokinMerkki); tyyppinen muuttuja
{
    printf("Antamasi merkki oli %c", Merkki); // Funktiotulostetaan saaannettu parametrinaanmerkki JokinMerkki%c:n muuttujan arvon
    getch();osoittamaan kohtaan
}

int main()
{
    return 1;
}

...

Esimerkki 3

Code Block

void LaskeYhteen(int Eka, int Toka)
{
char JokinMerkki = 'a';      int// Summaesitellään = 0;

    Summa = Eka + Toka;muuttuja, nyt paikallisena, nyt muutuja näkyy vain tässä funktiossa
    printf("\nsumma on %d", Summa);
}

int main()   TulostaMerkki(JokinMerkki);  // Funktio saa parametrinaan JokinMerkki muuttujan arvon
    getch();
    return 1;
}


Anchor
esim3
esim3

Esimerkki 3

Code Block

void LaskeYhteen(int Eka, int Toka)
{
    int Summa //= pääohjelma0;
{
    int FirstSumma = 5,Eka Second+ = 6Toka;
    LaskeYhteen(Firstprintf("\nsumma on %d", SecondSumma); // funktion kutsu, kutsussa ja itse funktiossa muuttujien nimet voivat olla erilaisia!
    
}

int main()
{
    LaskeYhteen(4, 6);
    return 1;
}

Edellä oleva funktio ottaa parametreikseen kaksi kokonaislukua ja sijoittaa ne funktion paikallisiin muuttujiin Eka ja Toka. Funktion laskema tulos näytetään ruudulla. Tämä funktio ei palauta mitään tietoa kutsujalle.

Funktion parametrit ja paikalliset muuttujat

Kaikilla funktiolla voi olla omia paikallisia (local) muuttujia. Lisäksi funktiolla voi olla parametreja, joiden avulla funktiolle välitetään tietoa sen ulkopuolelta. Parametrit eroavat paikallisista muuttujista siinä, että niille on annettu alkuarvo funktion kutsussa.

Code Block

void funktio(int x)
{
    int y;
    ...
}

...

.

Funktion paluuarvo

Funktio voi päätyttyään palauttaa kutsujalleen tietoa. Tieto palautetaan return-käskyllä. Funktiossa voi olla useita return-lauseita sopivissa kohdissa. Funktion nimen edessä oleva tyyppi määrää paluuarvon tyypin ja siksi return-lauseen perässä olevan arvon pitää olla samaa tyyppiä (joko vakio tai muuttuja).

...

Funktio ei voi palauttaa merkkijonoja eikä taulukoita, vaan näissä tapuksissa palautetaan aina osoite. Täytyy myös ottaa huomioon, se missä merkkijonolle on varattu muisti. Jos se varataan dynaamisesti, se voidaan tehdä funktiossa, mutta jos se varataa staattisesti (ns. normaalisti), se täytyy varata funktion ulkopuolella, koska funktion paikalliset muuttujat tuhoutuvat funktiosta palattaessa.

...