Python - def
Saját függvény készítése
A függvények zárt dobozok, amelyeket a programon belül bárhol fel tudunk használni úgy, hogy a zárójelek között megadjuk a paramétereit és ha van visszatérési érték, akkor a függvény előtti változóba betehetjük azt.
A második képen egyik függvény eredményét betöltjük a másik függvénybe. Tipikus példa, amikor az input függvény eredményét az int függvény egész számmá alakítja.
A harmadik képen egymásba ágyazva ugyanez.
függvény ~ eljárás ~ alprogram
Ha a feladatban létre kell hozni alprogramot, vagy eljárást, akkor az lényegében azt jelenti, hogy saját függvényt kell készíteni
A saját függvény a programon belül egy olyan alprogram, amely különálló része a programunknak és csak akkor hajtódik végre, ha azt utasításként meghívjuk a programunkban
1. példa: Hozzunk létre egy szoroz nevű eljárást és hívjuk is meg a programban különbő számokkal:
1def szoroz(x, y):
2 eredmeny = x*y
3 print(eredmeny)
4
5print("Számold ki 2 és 3 szorzatát:")
6szoroz(2, 3)
7
8print("Számold ki", a, "és", b, "értékének szorzatát:")
9a = 4
10b = 5
11szoroz(a, b)
1#include <iostream>
2using namespace std;
3
4void szoroz(int x, int y){
5 int eredmeny = x*y;
6 cout << eredmeny << endl;
7 }
8
9int main()
10{
11
12 cout << "Szamold ki 2 es 3 szorzatat:" << endl;
13 szoroz(2, 3);
14
15 int a = 4;
16 int b = 5;
17 cout << "Szamold ki " << a << " es " << b << " ertekenek szorzatat:" << endl;
18 szoroz(a, b);
19
20 return 0;
21}
Ebben az első 3 sor a def szóval létrehozza a szoroz függvényt, amelynek két paramétert kell megadni és kiírja a két megadott szám szorzatát.
Első meghíváskor x=2 és y=3 számokkal hívjuk meg a szoroz() függvényt
Második meghíváskor az a=4 változó értékét tesszük bele az x-be és a b=5 változó értékét tesszük bele az y-ba. Így ugyanazt csinálja, mintha szoroz(4, 5) utasítást adtuk volna meg.
2. példa: Ugyanaz, mint az előbb, de most a saját függvényünk nem kiírja az eredményt, hanem visszaküldi a programba a return utasítással:
1def szoroz(x, y):
2 eredmeny = x*y
3 return eredmeny
4
5print("Számold ki 2 és 3 szorzatát:")
6x = szoroz(2, 3)
7print("2*3 =", x)
8
9print("Számold ki", a, "és", b, "értékének szorzatát:")
10a = 4
11b = 5
12y = szoroz(a, b)
13print("a*b =", y)
14
15print("Ebben az esetben a visszakapott x és y értékeket nem csak kiírhatjuk,", end=" ")
16print("hanem további műveleteket végezhetünk velük.")
17print("x+y =", x+y)
1#include <iostream>
2using namespace std;
3
4int szoroz(int x, int y){
5 int eredmeny = x*y;
6 return eredmeny;
7 }
8
9int main()
10{
11 cout << "Szamold ki 2 es 3 szorzatat:" << endl;
12 int x = szoroz(2, 3);
13 cout << "2*3 = " << x << endl;
14
15 int a = 4;
16 int b = 5;
17 cout << "Szamold ki " << a << " es " << b << " ertekenek szorzatat:" << endl;
18 int y = szoroz(a, b);
19 cout << "a*b = " << y << endl;
20
21 cout << "Ebben az esetben a visszakapott x es y ertekeket nem csak kiirhatjuk, ";
22 cout << "hanem tovabbi muveleteket is vegezhetunk veluk." << endl;
23 cout << "x+y = " << x+y << endl;
24
25 return 0;
26}
A return utasítással küldjük vissza a saját függvényből (alprogramból) annak a kiszámolt eredményét.
Ahogy a fenti példákban láthatjuk két fajta függvény létezik:
- Nincs return visszatérési érték: Ezt nevezik eljárásnak, de sok helyen ezt is függvénynek nevezik.
Az eljárást csak mellékhatásra használjuk, mint például megjelentésre/fájlba írásra, adatbázis műveletre, de mivel nincs visszatérési értéke, az eredményt nem lehet a programon belül a további utasításokban felhasználni. - Van return visszatérési érték: Ezt mindenhol függvénynek nevezik.
Az eredményt változóba tehetjük, kiírathatjuk, későbbi utasításokban felhasználhatjuk.
Kulcsszó-paraméteres függvény
Ha valamelyik paraméternek van alapértelmezett értéke, akkor azt nem kell megadni a függvény meghívásakor.
Gyökfüggvény: ha nem adjuk meg a gyökkitevőt, akkor négyzetgyököt számol.
1def gyok(a, k=2):
2 eredmeny = a**(1/k)
3 return eredmeny
4
5print("1. példa: 2 paraméterrel: 27**(1/3)= 27 köbgyöke =", gyok(27, 3))
6print("2. példa: 1 paraméterrel: k alapertelmezett értékével, azaz négyzetgyököt számol. 4**(1/2)", gyok(4))
1#include <iostream>
2#include <cmath> // pow függvényhez
3using namespace std;
4
5double gyok(double a, double k = 2) {
6 double eredmeny = pow(a, 1.0/k);
7 return eredmeny;
8 }
9
10int main() {
11
12 cout << "1. példa: 2 paraméterrel: 27^(1/3) = " << gyok(27, 3) << endl;
13 cout << "2. példa: 1 paraméterrel: k alapertelmezett értékével (négyzetgyök) 4^(1/2) = " << gyok(4) << endl;
14
15 return 0;
16}
1<?php
2
3function gyok($a, $k = 2) {
4 $eredmeny = pow($a, 1/$k);
5 return $eredmeny;
6 }
7
8echo "1. példa: 2 paraméterrel: 27^(1/3) = " . gyok(27, 3) . "<br>";
9echo "2. példa: 1 paraméterrel: k alapertelmezett értékével (négyzetgyök) 4^(1/2) = " . gyok(4) . "<br>";
10
11?>
Rekurzív függvény
Olyan esetekben alkalmazzuk, amikor a feladatot visszavezethetjük önmagával megegyező, de egyszerűbb részproblémákra. Ilyenkor adunk egy szabályt, ami az eredeti függvény önmaga egyszerűbb esetre alklamazásaiból is megkapható
A rekurzív függvényekben mindig van olyan alapeset, amelyre visszavezet a többi eset és az már nem hívja meg önmagát. Különben végtelen hurokba keveredne a függvény.
Faktoriális
fakt(0)=1, fakt(1)=1, minden más esetben: fakt(n) = n*fakt(n-1) = n*(n-1)*fakt(n-2)
1def faktorialis(n):
2 if n<=1:
3 e = 1
4 else:
5 e = n*faktorialis(n-1)
6 return e
7
8print(faktorialis(1))
9print(faktorialis(2))
10print(faktorialis(3))
11print(faktorialis(4))
12print(faktorialis(5))
1#include <iostream>
2using namespace std;
3
4int faktorialis(int n){
5 int e;
6 if (n<=1){
7 e = 1;
8 }
9 else{
10 e = n*faktorialis(n-1);
11 }
12 return e;
13 }
14
15
16int main()
17{
18 cout << faktorialis(1) << endl;
19 cout << faktorialis(2) << endl;
20 cout << faktorialis(3) << endl;
21 cout << faktorialis(4) << endl;
22 cout << faktorialis(5) << endl;
23
24 return 0;
25}
Fibonacci-számok
fib(0)=0, fib(1)=1, minden más esetben: fib(n) = fib(n-1) + fib(n-2), azaz az előző két szám összege.
1def fibonacci(n):
2 if n<=1:
3 e = n
4 else:
5 e = fibonacci(n-1) + fibonacci(n-2)
6 return e
7
8
9print(fibonacci(1))
10print(fibonacci(2))
11print(fibonacci(3))
12print(fibonacci(4))
13print(fibonacci(5))
1#include <iostream>
2using namespace std;
3
4int fibonacci(int n){
5 int e;
6 if (n<=1){
7 e = n;
8 }
9 else{
10 e = fibonacci(n-1) + fibonacci(n-2);
11 }
12 return e;
13 }
14
15
16int main()
17{
18 cout << fibonacci(1) << endl;
19 cout << fibonacci(2) << endl;
20 cout << fibonacci(3) << endl;
21 cout << fibonacci(4) << endl;
22 cout << fibonacci(5) << endl;
23
24 return 0;
25}