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}