Kihagyás

4.2. Függvények

A függvények olyan alprogramok, amelyek nagyon hasonlítanak az eljárásokra, de van egy nagyon fontos, lényeges különbség.

A függvény definiálása során legyünk tekintettel a tiszta kód szabályaira. Célszerű a metódusok (függvények) definiálásánál figyelembe venni az alábbi ajánlásokat:

  • minél kevesebb argumentumot tartalmazzon
  • lehetőleg legyen rövid
  • jól elkülönülő részekből álljon
  • a sorok legyenek rövidek
  • csak egy dolgot csináljon
  • lépésenkénti haladás
  • követhető legyen a szerkezet
  • minél kevesebb behúzási szint legyen benne

A függvény minden esetben előállít egy értéket, és ezzel az értékkel tér vissza a főprogramba. Ezért mindig meg kell adni a függvény neve előtt a visszatérési érték típusát. Ezt a void helyett kell beírni a fejrészbe. A visszatérési értékkel rendelkező változó elé pedig a return kulcsszót kell írni. Ha viszont egy alprogramban több értéket szeretnénk előállítani, akkor a függvényt nem használhatjuk, mivel az csak egy értéket képes előállítani, és az lesz a visszatérési értéke.

Mint azt már korábban említettük, az alprogramokat – melyek lehetnek eljárások vagy függvények – a főprogram vagy más alprogram hívja meg, de egy eljárás vagy függvény meghívhat további eljárásokat vagy függvényeket is.

38. feladat

Állítson elő 8 egész számot a [0; 100]-ban, és írja ki őket egy sorba! Egy függvény segítségével számolja ki a számok átlagát és írja ki 2 tizedes pontossággal! Név: Átlag

Megoldás:

namespace Atlag
{
    class Program
    {
        static double atlagFuggveny(int[] a)
        {
            double osszeg = 0, atlag = 0;

            for (int i = 0; i < 8; i++) 
            {
                osszeg += a[i];
            }

            atlag = Convert.ToDouble(osszeg) / 8;
            return atlag;
        }

        static void Main(string[] args)
        {
            int[] a = new int[8];
            Random szamok = new Random();

            for (int i = 0; i < 8; i++)
            {
                a[i] = szamok.Next(101);
                Console.Write("{0,4}", a[i]);
            }

            Console.WriteLine();
            Console.WriteLine(" A tömb elemeinek átlaga: {0:0.00}", atlagFuggveny(a));
            Console.ReadKey();
        }
    }
}

A függvény az a tömböt kapja meg paraméterként, és az atlag értékével tér vissza a függvényhívás helyére. A függvény értékének típusa double, ezért az atlag változó típusának is ilyennek kell lenni. Mivel az elemek száma egész, ezért az osszeg / 8 (egész / egész) csak akkor lesz valós, ha a Convert.ToDouble segítségével azzá tesszük az osztandót.

39. feladat

Kérje be egy másodfokú egyenlet együtthatóit, és számolja ki a [-6, 6]-ban az egész x értékekhez tartozó függvényértékeket, és írja ki a képernyőre egy sorba az x értékeit, és alá a megfelelő y értékeket! Az együtthatók értéke a [-5, 5]-ben legyen! Használjon függvényeket az adatbekéréshez és a függvényérték számításához! Név: Függvényérték

Megoldás:

namespace Fuggvenyertek
{
    class Program
    {
        static double fuggveny(double a, double b, double c, double x)
        {
            double y = 0;
            y = a * x * x + b * x + c;
            return y;
        }

        static double beker()
        {
            double adat = 0;
            do 
            {
                adat = Convert.ToDouble(Console.ReadLine());
            } while (adat > 5 || adat < -5);
            return adat;
        }

        static void Main(string[] args)
        {
            double a = 0, b = 0, c = 0;

            Console.Write(" Kérem az a értékét [-5, 5]: ");
            a = beker();
            Console.Write(" Kérem a b értékét [-5, 5]: ");
            b = beker();
            Console.Write(" Kérem a c értékét [-5, 5]: ");
            c = beker();

            Console.WriteLine();

            // X értékek kiírása
            for (int x = -6; x < 7; x++) 
            {
                Console.Write("{0,6}", x);
            }

            Console.WriteLine();

            // Y (függvény) értékek kiírása
            for (int x = -6; x < 7; x++) 
            {
                Console.Write("{0,6}", fuggveny(a, b, c, x));
            }

            Console.ReadKey();
        }
    }
}

Az adatbekérést a beker függvény segítségével végeztük el, ahol egy hátultesztelő ciklussal csak a helyes értéket fogadjuk el. A függvényérték kiszámítása a valós típusú fuggveny függvénnyel történik, ahová az együtthatók és az x értéke paraméterként kerül át.

A függvény visszatérési értéke pedig az y, amelynek értékét a második for ciklussal írjuk ki. Mint látható, a függvényekre is érvényes: mindegy, hogy a főprogram elé vagy után helyezzük el az alprogramokat. Ennél a feladatnál a program futtatása során célszerű, ha egész értékeket adunk meg az együtthatóknak a kiíratás miatt.


Gyakorló feladatok

  1. Írjunk olyan függvényt, amely egy gömb térfogatát számolja ki!
  2. Készítsünk függvényeket, amelyek téglalap területét és kerületét számítják ki!
  3. Készítsünk olyan függvényt, amely egy szám négyzetét, köbét, és negyedik hatványát adja vissza!
  4. Készítsünk függvényt, amely eldönti, hogy a paramétere páros vagy páratlan természetes szám!
  5. Írjunk olyan programot, amely bekér egy mondatot, és kiírja úgy, hogy minden szavának kezdőbetűjét nagybetűvé alakítja!
  6. Írjunk olyan programot, amely bekér egy mondatot, és kiírja minden második karakterét!
  7. Készítsünk olyan programot, amely bekér egy karaktersorozatot, és minden karakterét megduplázza!
  8. Írjunk olyan programot, amely bekér egy karaktersorozatot, és ha a hossza páratlan, akkor írja ki a középső karakterét, ha páros, akkor írja ki a karaktersorozatunk első felét!
  9. Kérjünk be egy karaktersorozatot a billentyűzetről és írjunk olyan függvényt, amely megszámolja és kiírja az előforduló 'e' és 'i' betűk számát!
  10. Kérjünk be egy karaktersorozatot a billentyűzetről, és írassuk ki magánhangzók nélkül egy függvény segítségével!
  11. Írjunk olyan programot, amely bekér egy karaktersorozatot, és írassuk ki annyiszor, ahány 'a' betű van benne!
  12. Írjunk olyan programot, amely bekér egy karaktersorozatot, és kiíratja az első előforduló "sz" karaktersorozattól kezdődően!