Funkciók c, oktatási program
Az alprogram egy megnevezett piaci szereplők csoportja megoldásában minden különösebb probléma, ez egy rutin, meg lehet kezdeni a nevében telefonálok, tetszőleges számú alkalommal a különböző helyeken a program. Rutinok megszabadítjuk a fejlesztők a rutinszerű ismétlése azonos típusú kódot.
Például létrehozhat egy rutin, hogy kiírja az összes elemet a tömb és a képernyőn. Most, hogy a tömb, elég az egyik csapat (szubrutinhívás). Ebben az esetben a tömb és elérhetőnek kell lennie területeken a program, amit alprogram hívása (például egy tömb lehet globális).
Annak érdekében, hogy végezze el a rutin, nem csak az azonos, hanem az azonos típusú tevékenységet (a ugyanazt az algoritmust, de különböző paraméterekkel), alkotta a paramétereket a transzmissziós mechanizmus a fő program szubrutint. Az alprogram használ valamilyen absztrakt változókat (ún érveket vagy paraméterek), fajlagos értékek meghatározása csak a szubrutin hívást.
Például, egy szubrutin létrehozhat paramétereket, hogy nem csak a nyomtatási tömb elemei a. de bármilyen más méretben és akinek a nevét adja rutin, amikor hívják a paramétereket.
Szubrutinhívás hívják utalás nevében céljának annak használatát. Challenge - ha fut az alprogramot.
Mint a rutinszerű egyszerűen végezni néhány műveletet (például, megjelenítésére egy sor a képernyőn), és visszatér egy meghatározott eredmény formájában egy bizonyos értéket (például kiszámításához számtani átlaga tömb és visszatér az eredmény szám). Alprogram úgynevezett első típusú eljárásokat. és a második - funkciók (úgy néz ki, mint egy függvény a matematika, ahol egyetlen érték kiszámítása is számos érv). A C ++, a rutin nevű funkciót, de lehet két típusa van: vagy nem adnak vissza értéket.
Tehát konkretizálják a koncepció funkció:
Funkció - egy bizonyos csoportja műveletek egyedi nevet, ami lehet:
- Név szerint hívta bárhol a programban.
- Kap egy bizonyos értékrend a külső program a hívás pillanatában.
- Visszatérési értéket eredményeként néhány előre meghatározott típusú.
funkciót is tevékenységnek minősül, hogy jött létre a fejlesztő.
Egy jól ismert példája a funkció fő. Ez automatikusan meghívásra, ha a program elindul.
Létrehozása funkció
Mielőtt egy függvény meghívásakor meg kell állapítani.
- Tip_rezultata - néhány meglévő (pl beágyazott) adattípus vagy kulcsszó érvénytelen, jelezve, hogy a funkció bármilyen jelentősége nem fog visszatérni.
- Függvény_neve - egyedülálló az adott névtér azonosítót.
- Tip_parN - néhány meglévő (például, beágyazott) típusú adatokat N-oro érv.
Ha a függvény nem ad vissza semmilyen eredménnyel. E. nyilvánították érvénytelennek, a hívást nem lehet használni, mint egy operandus egy bonyolultabb kifejezés (például, az értéke egy ilyen funkció nem lehet hozzárendelni valamit).
Meghatározása (leírás) a függvény
Meghatározása vagy az adott funkció leírása tartalmaz egy listát az elvégzendő műveletek a funkciót.
Blokk függvénydefiníció is nevezik a testét.
Az egyik funkció nem nyilvánították, vagy belül meghatározott más (azaz, nem nyilvánítja és meghatározzák funkciók belsejében fő).
Nyilvánvaló, hogy az összes rendelkezésre álló információt függvény prototípusa később a meghatározás, így ha a funkció határozza meg, mielőtt az első hívást, majd egy külön prototípus nem szükséges.
De eltekintve prototípus pont azokban az esetekben, ahol a funkció később ismertetjük azok használatát. Például, akkor állapítsa meg a funkció a fő, mert a fő, de csak azt ismertetik, miután a fő.
Ez a funkció lehetővé teszi, hogy a moduláris programok forráskódját, amely lehet tárolni akár különböző fájlokat.
Formális és aktuális paraméterek
Formai paraméterek létezik a technika állása és a test a függvény definíciójában. Ezek nevek és néhány egyedi funkciók állnak rendelkezésre a helyi változókat.
Az aktuális paraméterek vannak a fő program. Ezek meghatározott függvényhívás helyett formális.
Abban az időben a hívás értéke az aktuális paraméterek a hozzárendelt funkció formális. Ennek megfelelően, a nevét, a formális és aktuális paraméterek lehetnek azonosak, ez nem okoz konfliktust.
Az egymást átfedő helyi változók és paraméterek globális tárgyak - az egyik oka annak, hogy ne hozzon létre funkciók eléréséhez globális objektumok (nem ismert, hogy milyen lesz a neveket a következő, vagy valaki másnak a program, amely felhasználja a funkció).
Elsőbbségi hívások és rekurzió
Egy funkció lehet nevezni a másik.
Különösen a belső tested funkció nevezi magát. Ezt nevezik a rekurziót.
Van még egy komplex (beágyazott) rekurzió, ha például, a funkció A hívás funkció B, és funkciója a B - funkció A.
Példa egyszerű rekurzió (függvény nevezi magát):
A fő hátránya rekurzió - újra kiszámítja az azonos jelentésűek.
Példa: kiszámításához az ötödik Fibonacci-szám rekurzív algoritmus, akkor ki kell számítani a negyedik és harmadik Fibonacci-számok. Kiszámításához a negyedik - meg kell kiszámítani a második és a harmadik, de a harmadik már figyelembe a számítás az ötödik.
Továbbá, általában egy időben csak egy funkciót lehet végezni, amíg vissza nem tér következtében - nem kezdődhet végrehajtását a következő funkcióra. Kezelése a főprogram át a funkciót, amíg a funkció befejezi munkáját, vezérlés nem fog visszatérni a fő program. Különösen: a hiba a funkció leáll az egész programot.
Módszerek átvitelére paramétereket a funkció
Korábban már úgy csak a helyzet, amikor a függvényt hívjuk aktuális paraméter értéke másolódik egy helyi változó, kapható formális paraméter függvényében.
Egy ilyen eljárás az átviteli értékével paraméter az alábbi korlátozások:
lehetőség van arra, hogy utalja át a kapcsolati paraméter eltávolítására ilyen korlátozások.
A paraméter átadása hivatkozás, elegendő, hogy egy jel függvény prototípust miután a paraméter típusát.
Ebben az esetben is, ha a neve a formális paraméter és az aktuális mérkőzés nem merül fel probléma:
Ha szükség van, hogy megvédje a továbbított objektum változások függvényében, le van írva, mint egy állandó paraméter.
A funkció lehet adni, és a mutatók.
A tömb átadhatók a funkciót más módon. Prototípus példa:
A megfelelő paraméterek, amelyek szerint kerül átadásra egy mutatót az első eleme a tömb, bejelentett állandó:
Ezután a funkció nem tudtuk mozgatni a mutatót a testvér.
alapértelmezett paramétereket (opcionális paraméterek)
Számos paraméter a függvény a szakaszában annak létrehozását megadható alapértelmezett értékek, ezeket az értékeket automatikusan megadni, ha a hívás nem határozták meg pontosan a tényleges paramétereit.
Az alapértelmezett beállítás akkor hasznos, ha a funkció egyértelműen előre néhány paramétert indít gyakrabban.
Leggyakrabban ez a funkció ki lehet számítani a téren. Ha van, hogy írjon egy hívást, mint ez:
De tudtuk, hogy függvényeket alapértelmezett paramétereit a következők szerint:
Most akkor hívja a funkció megadása nélkül az utolsó paraméter:
Amely egyenértékű a hívás:
Vagy mutasson:
A funkció több alapértékekre. Például, úgy a függvény prototípus, amelyet fel lehetne másolni az egyik sorban a másikra, mivel az i-edik karaktert, és befejezve az n-edik:
Ez a funkció lehet nevezni két, három vagy négy paramétert. Ha a hívás 2 paramétereket, az első 100 karakter másolása.
Ha megadjuk a 3 paraméter a hívás, az első két érték lesz hozzárendelve kötelező paraméter, és a harmadik - az első kötelező. Az értékek a választható paraméterek hozzárendelése a sorrendben jelennek meg, balról jobbra. Nincs lehetőség, hogy mentse az alapértelmezett érték a harmadik paramétert, mint például az átvételi érték az utóbbi.
függvény túlterhelés
Az egyediség a funkció határozza meg nem csak a nevét, hanem állítsa be a paramétereket és visszatérési típusa. C ++ lehetővé teszi, hogy a funkció a nevét egy már meglévő, feltéve, hogy az új funkció lesz más paraméterek.
A visszatérő típus, így lehet mind változhat, és ugyanaz (de nem hozhatnak létre funkciókat azonos nevű és értékszemléletét hogy csak abban különböznek típusú visszatérési érték).
Funkció túlterhelést is kényelmesen elvégezhető hasonló intézkedéseket a különböző értékek:
Milyen funkciót nevezik, a program meghatározza típusa alapján a paraméterek át.
De egy ilyen hívást fog okozni a fordítási hibát:
Bár vannak avtoprivedenie, a fordító nem tudja kitalálni, hogy melyik változat a funkció, fogunk használni.
Ha további funkciójának meghatározása az alapértelmezett beállítás túlterhelt, akkor is szükség van, hogy kövesse az egyediségét a hívást.
Ez a funkció, bár a rendszeres frac túlterhelés funkció nem használható, mert abban az esetben a hívás frac (4,3) - nem egyértelmű, hogy melyik lehetőséget használja: az első vagy a harmadik.
funkció sablonok
Sablonok - C ++ nyelven kódoló eszközt generalizált algoritmusok hivatkozás nélkül néhány paraméter (például adattípus).
Most akkor hívja a függvény az alábbiak szerint:
Típus automatikusan megállapításra kerül típusa alapján az aktuális paraméterek. És akkor egyértelműen meg kell határozni, milyen értéket kell venni az általános típus szögletes zárójelben:
Minták, amint azt az alábbiakban tárgyaljuk, amelyek nem csak a nagy funkció, hanem osztályokat. Azonban használatuk osztályok nem különbözik a használata a funkciót.
- Hozzon létre egy funkció, amely két egész szám és b paraméterekkel jellemzett. és annak értéke visszatér véletlen egész szám az intervallum [a; b]. C Ez a funkció használható, hogy töltse ki a tömb 20 egészek, és megjeleníti.
- Hozzon létre egy funkció, amely kiadási elrendezésben az említett hosszúság a képernyőn a sorban. A funkciókat az első és a második programok töltse tömbök 10 5 elemnetov egyes véletlen számokat, és hogy mind az 5 tömb a képernyőn, mindegyik külön sorban.
- Készítsen programot, amely rekurzív kiszámítása Egy szám faktoriálisát be a billentyűzetről a felhasználó.
- Készítsen funkció, amely egyfajta elrendezésben megadott hosszt bármely ismert módszerrel.
- A felhasználó ezt a billentyűzet 7 sor legfeljebb 100 karakter hosszúságú lehet. Készítsen programot, amely rendezni és vizuális vonal a képernyőn ábécé sorrendben. Például a felhasználó belépett:
A program megjeleníti: