Programozás Alapjai 2. A C alapú nyelvek alapjai, keretrendszer elvű felépítés, a Visual C# nyelv alapjai Kis Balázs
.NET keretrendszer I. A.Net keretrendszer ötlete visszanyúlik egészen a Windows 2000 idejéig. Mikor is rájöttek, hogy az új kernel alapú operációsrendszerekben érdemesebb lenne egy dinamikus futtatókörnyezetet kialakítani, az addigi natív futtatás helyett. Az ötlet nem volt új keletű, a Java programozási nyelv ekkor már régen alkalmazta a technológiát. Kis Balázs 2
.NET keretrendszer II. A rendszer létrejöttével leegyszerűsödtek addig igen komplikált funkciók: Frissítés Az új.net alapú rendszer frissítéséhez nem kell a rendszermagban, vagy a rendszerben jelentősen módosítani. Fordítás Mikor egy programot fordít a rendszer, nem kell a külső forrásokat is a programba fordítani (mint pl.: Borland Delphi esetén) hiszen az a gépen van. Kis Balázs 3
.NET keretrendszer III. Így a.net keretrendszerben fejlesztett program bármilyen rendszeren képes futni, ahol a keretrendszer telepítve van. Ezzel elérhető a platform függetlenség Hiszen a program nem végleges kódot, hanem úgynevezett köztes nyelven írt kódot tartalmaz, mely már ellenőrzött, szintaktikailag helyes, és a keretrendszer tudja továbbfordítani a program elindításakor. A keretrendszer pedig akár több operációs rendszeren is működhet. Kis Balázs 4
Köztes nyelv Köztes nyelvnek nevezzük azt a nyelvet, mely alapján a keretrendszer elvű programozási technológiák létrehozzák a végleges programot. IL, CIL, MSIL Intermediate Language Common Intermediate Language Microsoft Intermediate Language Kis Balázs 5
Programfordítási folyamat II. Természetesen mivel a programunk nem végleges kódot tartalmaz a felhasználó gépének a feladata előállítani a natív, futtatható kódot. Ez természetesen több energiát igényel és időveszteség is felléphet indítás közben. Azonban a fordító megjegyzi, hogy melyik részek lettek lefordítva a kódból, így ha újra arra a részre van szükség, azt már nem kell újra lefordítani. Kis Balázs 6
Ismerkedés a Visual C# nyelvvel Keretrendszerek működése, C nyelvi alapok Kis Balázs 7
Nyelvi alapok A Visual C# alapvetően egy Objektum orientált C alapú nyelv, melyet a Microsoft fejleszt. A C nyelvhez hasonlóan itt is az elsődleges alapszabály, hogy minden egyes parancs lezárásaként ; -t kell rakni. Amennyiben elmarad nem fordul le a program, mivel nem értelmezhető az. Kis Balázs 8
Operátorok I. A nyelvben a C nyelvben használatos operátorok használatosak: Értékadás <változó> = <érték> Érték tesztelés Egyenlő-e <változó> == <érték> Nem egyenlő-e <változó>!= <érték> Kisebb-e, nagyobb-e <változó> < <érték>, <változó> > <érték> Kisebb, vagy egyenlő, nagyobb, vagy egyenlő <változó> <= <érték>, <változó> >= <érték> Kis Balázs 9
Operátorok II. Mindezek mellett sok egyszerűsítés is adott a nyelvben: Algoritmusban láthattuk, hogyan kell értéket növelni, vagy csökkenteni (c := c + 1, c := c - 1) c++; c--; ++c; --c; Különbség a két parancs között a műveleti sorrend: c = 2; d = c++; d = 2, c = 3 d = ++c; d = 4, c = 4 Kis Balázs 10
Operátorok III. Ha nem eggyel szeretnénk a változó értékét növelni, vagy csökkenteni (c := c + 5, c := c - 5) c += 5; c -= 5; Ugyan így a többi matematikai alapművelet is elvégezhető c *= 3; c /= 2; Természetesen mindegyikre igaz, hogy az algoritmusban alkalmazott formula is használható: c += 5; c = c + 5; c *= 3; c = c * 3; Kis Balázs 11
Operátorok IV. Természetesen logikai műveletekhez is tartoznak logikai operátorok: És kapcsolat: && a jelölése Vagy kapcsolat: a jelölése Not jelölése:! Kis Balázs 12
Típusok Ahogy már láthattuk Pszeudokódban minden változónak meg van adva még deklarációnál, hogy milyen típusú értéket tárolhat. Mivel a Visual C# is szigorúan típusos nyelv, így itt is kötelezően be kell tartani a típusdeklarációkat, így pl.: egy szám értéket tároló változó nem képes egy szöveges típust eltárolni. Kis Balázs 13
Típusok Visual C#-ban Primitív típusok: Karakter tárolására alkalmas primitív típus char Szöveg tárolására alkalmas primitív típus string Egész szám tárolására alkalmas primitív típus byte (2 8 ) 0-255 int (2 32 ) - ~-2000000000-~2000000000 Nagy szám tárolására: long (2 64 ) Tizedes tört tárolására alkalmas primitív típus float (7 számjegyes tizedes törtig) Nagyobb pontosság esetén: double (15-16 számjegyes tizedes törtig) Kis Balázs 14
Konstans és változó Mivel szigorúan típusos nyelv, így minden egyes használatban lévő tárolót, változót előre definiálni kell: Konstans deklaráció: const int konstans = 0; Szabványosan: const <típus> <név> = érték; Változó deklaráció: int i; Szabványosan: <típus> <név>; Opcionálisan azonnal adható a változónak érték is: int i = 5; Kis Balázs 15
Tömb és mátrix Tömböt és mátrixot C# környezetben a következőképpen tudunk deklarálni: Tömb deklarálása: int[] tomb = new int[20]; <típus>[] <név> = new <típus>[<tömbméret>]; Mátrix deklarálása: 2 dimenziós tömb: int[,] tomb = new int[20,10]; 3 dimenziós tömb: int[,,] tomb = new int[20,10,30]; Kis Balázs 16
Jelölések Mint a legtöbb programnyelvben itt is, kötelezően jelölni kell az egyes típusok értékeit, különben összeolvadna a programkóddal értelmezhetetlenné téve azt. Szöveg (string) jelölése: szöveg Karakter (char) jelölése: c Lebegőpontos (float) jelölése: 3.7F Mivel az F jelzi, hogy a pontosság nem double Kis Balázs 17
Típus konverziók I. A szigorú típusossághoz az is hozzájárul, hogy két típus között nem feltétlenül egyértelmű a konverzió pl.: string a = 23 ; int b = a; Ez így hibás, hiszen string típusú anyagot akarunk int változóba átvenni. A szöveg és a számok között például nem egyértelmű a konverzió. Kis Balázs 18
Típus konverziók II. Amikor két primitív típus közti átmenet nem implicit, az külön konvertálást igényel, hogy az egyik típusú adatból a másik típust elérjük. Visual C#-ban minden konvertálást a Convert osztály segítségével tudunk majd végrehajtani. Az előző példán bemutatva: string a = 23 ; int b = Convert.ToInt32(a); Kis Balázs 19
Kommentezés Lehetőségünk van a programban elhelyezni magyarázatokat, kommenteket. Egy sor kommentezése: //Ez egy sornyi komment Több sor kommentezése: /*Ez egy többsoros komment*/ Kis Balázs 20
Programozás megkezdése Első program elkészítése, konzol használata, nyelv megismerése Kis Balázs 21
Első program elkezdése I. Mikor Visual Studio-ban fejlesztünk, 2 fontos fogalommal találjuk magunkat szembe, melyet a Microsoft fejlesztői, kényelmi, csoportos fejlesztési szempontokat figyelembe véve hoztak létre: Solution Project Mára szinte mindegyik modern fejlesztőkörnyezet, IDE (Integrated Development Environment) támogat hasonló szintű felosztást. Kis Balázs 22
Solution vs. Project I. Project Olyan részegység, mely egy bizonyos feladatot lát el egy programcsomagon belül. Ilyen lehet például egy önálló program is, de akár egy a projektek között megosztott osztálykönyvtár is. Kis Balázs 23
Solution vs. Project II. Solution Olyan egybefoglaló egység, mely alá több project tartozhat. Valójában a moduláris programozás egy modern kivitelezése, miszerint minden programozó(csoport) megkap egy kisebb project-et a teljes programból, melyeket a fejlesztés során folyamatosan egymás mellett lehet kialakítani. Ezzel az elkészítési időt és hatékonyságot is javítva. Kis Balázs 24
Első program elkezdése II. Természetesen egy Solution csak akkor indulhat el, ha minimum egy Project szerepel benne, így nekünk is New Project menüvel kell kezdjük programunk fejlesztését. Mikor kiválasztjuk ezt a menüt (File New Project ) felugrik egy ablak mely a Project, Solution beállításait végzi el. Kis Balázs 25
Feladat I. Hozzunk létre egy FirstProgram nevű Solution-t és egyben Project-et is, mely egy Console Application legyen. Figyeljük meg, hogy mit hozott létre a program. Solution Explorerben Alap programkódban Fájl szinten Kis Balázs 26
Console használata I. A konzol alapú programozás esetén, a programnak a régi Pascal-os időkből ismeretes kinézete lesz, így tehát Console Application esetén kizárólag egy konzol áll rendelkezésünkre, hogy tartsuk a felhasználóval a kapcsolatot. Kisebb, nem kifejezettem felhasználói programok, vagy kiszolgáló alkalmazások megírásához a mai napig hasznos lehet. Kis Balázs 27
Console használata II. A Console-ban alapvetően két dolgot tudunk megtenni beolvasni és kiírni: Beolvasni tudunk a felhasználótól adatokat Kiírni pedig eredményeket, vagy felszólításokat. Minden Console műveletet a Console osztállyal tudunk elérni Beolvasás: Console.ReadLine(); Kiíratás: Console.WriteLine( Szöveg ); Kis Balázs 28
Feladat II. Az előzőek alapján készítsük el első programunkat Visual C#- ban! Írassuk ki konzolban, hogy Helló Világ! ; Futtassuk a programot! Mit tapasztalunk? Megoldás: A Console egészen addig fut, amíg végrehajtandó feladat maradt, vagy felhasználói interakcióra várunk. Így a kód végére szúrjunk be egy Console.ReadKey();-t Kis Balázs 29
Feladat III. Módosítsuk a programot úgy, hogy azt írja ki, hogy kérek egy számot, majd ugyan azt a számot írjuk vissza a képernyőre! Tipp: Minden beolvasott anyag, alapvetően string. Kis Balázs 30
Feladat IV. Újra módosítsuk a programot úgy, hogy a visszaadott érték ne a szám legyen, hanem annak a négyzete (mint az algoritmusos feladatban) Tipp: A négyzet kiszámolására több eszközünk is van: szám*szám Math.Pow(szám,hatvány); Kis Balázs 31
Elágazások I. Hasznuk ugyan az mint algoritmusokban. Pl.: if (a < b) { Console.WriteLine( A b nagyobb! ); } else { Console.WriteLine( Az a nagyobb! ); } Kis Balázs 32
Feladat V. Készítsünk programot, mely ha páros számot kap, akkor a négyzetét, ha páratlan számot, a köbét adja vissza! Tipp: Maradékos osztást a % jel segítségével tudunk végeztetni pl.: 5%3=2 Kis Balázs 33
Elágazások II. Az értékszerinti többszörös elágazás egy speciális elágazás, mely több opciót szolgáltat: Pl.: int a = 10; switch(a) { case 1: Console.WriteLine( egy ); break; case 10: Console.WriteLine( tíz ); break; default: Console.WriteLine( nem tudom ); break; } Kis Balázs 34
Feladat VI. Készítsünk programot, mely bekér egy jegyet és visszaadja a magyar iskolarendszerben használt szöveges értéket! 1 elégtelen 2 elégséges 3 közepes 4 jó 5 jeles Kis Balázs 35
Ciklusok A ciklusok ugyan úgy iterálásra szolgálnak Visual C#-ban is, mint algoritmusban. A ciklusoknak itt is több típusa létezik: Elöl tesztelős ciklus Hátul tesztelős ciklus Számlálós ciklus Bejáró ciklus (speciális) Kis Balázs 36
Elöl tesztelős ciklus (WHILE) Az elöl tesztelős ciklus működése úgy zajlik, hogy előbb megnézi, hogy igaz-e a feltétel amit adtunk neki, majd ha igen, akkor belép a ciklusmagba. Ezt egészen addig csinálja, amíg teljesül a feltétel. Pl.: int i = 0; while (i < 10) { i++; } Console.WriteLine(i); Kis Balázs 37
Hátul tesztelős ciklus (DO WHILE) Működése hasonló az elöl tesztelős ciklushoz, mindössze a vizsgálat helye különbözik, ugyanis a hátul tesztelős ciklus először lefut majd ellenőrzi, hogy igaz-e még a feltétel. Pl: int i = 0; do { i++; Console.WriteLine(i); } while (i < 10); Kis Balázs 38
Számlálós ciklus (FOR) A számlálós ciklus működése is hasonló a while ciklushoz, azonban ebben az esetben a ciklusváltozót maga a ciklus vezeti. Pl.: for (int i = 1; i <= 10; i++) { Console.WriteLine(i); } Kis Balázs 39
Bejáró ciklus (FOREACH) A bejáró ciklus egy speciális ciklus, mivel nem minden programozási nyelvben található meg, illetve a használata sem egységes a nyelvekben. Használni csak és kizárólag olyan adatszerkezeteken tudjuk, amelyek bejárhatók, mint pl.: egy tömb. Pl.: foreach (int elem in <adatszerkezet>) { Console.WriteLine(elem); } Kis Balázs 40
Feladat VII. Készítsünk programot amely bekér 5 számot egymás után, és kiírja a számok összegét és szorzatát. Kis Balázs 41
Programozási tételek Alapvető algoritmusok Kis Balázs 42
Programozási tételek I. A programozásban a legfőbb cél az, hogy a lehető legoptimálisabban hajtsuk végre az adott feladatokat. Ez a cél még a régebbi időkből maradt meg, de manapság is célnak lehet venni. Manapság már elmondható, hogy a szoftvergyártó cégek alapvetően nem feltétlenül erre törekednek. 640KB memória mindenre elég Kis Balázs 43
Programozási tételek II. A programozásban persze az is relatív, hogy mi számít optimalizáltnak és mi nem, hiszen, már azzal is lehet javítani az optimalizáltságot ha ugyan azt a programot adott rendszerre másik programfejlesztési technika, vagy másik környezet segítségével implementáljuk. Így definiálni kell, hogy pontosan mit értünk optimális szoftver alatt. Kis Balázs 44
Programozási tételek III. Optimális program ismérvei: Az adott feladat megoldásához a lehető legkevesebb memóriát használ. Nincsenek benne fölöslegesen futó részek. A program a többi erőforrásból is csak annyit használ, amennyi feltétlen szükséges a futásához. Mára természetesen a számítógépek magas teljesítménye miatt ezek tág korlátok lettek. Kis Balázs 45
Programozási tételek IV. Az optimalizáltság megtartása érdekében, matematikusok és programozók, kisebb, de annál fontosabb és gyakoribb feladatokra, a lehető legoptimálisabb, bármely nyelvbe implementálható, általános algoritmusokat hoztak és folyamatosan hoznak létre. Ezeket az algoritmusokat nevezzük programozási tételeknek. Kis Balázs 46
Programozási tételek V. Alapvető programozási tételek: Maximum/Minimum kiválasztás Átlag számítás Kiválasztás Szétválogatás Lineáris keresés Bináris keresés Eldöntés Megszámlálás Kis Balázs 47
Maximum kiválasztás A maximum kiválasztás tétele, egy tömbből kiválasztja a maximumot. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva. max, i : egész max := 1 Ciklus i := 2-től n-ig Ha tomb[max] < tomb[i] akkor max := i EV. CV. Kis Balázs 48
Minimum kiválasztás A minimum kiválasztás tétele, egy tömbből kiválasztja a minimumot. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva. min, i : egész min := 1 Ciklus i := 2-től n-ig Ha tomb[min] > tomb[i] akkor min := i EV. CV. Kis Balázs 49
Átlagszámítás Az átlag számítás tétele, egy tömbből képes kiszámolni az átlagot. Előfeltétel: Létezik egy számokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva. atlag : valós i : egész atlag := 0 Ciklus i := 1-től n-ig atlag := atlag + tomb[i] CV. atlag := atlag / n Kis Balázs 50
Kiválasztás A kiválasztás tétel, egy bizonyos feltételnek elsőnek eleget tevő elemet választ ki a tömbből. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve adott egy T feltétel. elem, i : egész i := 1 Ciklus amíg i <= n ÉS NEM(T feltétel) i := i + 1 CV. Ha i <= n akkor elem := tomb[i] EV. Kis Balázs 51
Lineáris keresés A kiválasztáshoz hasonló tétel, mindösszesen a pozíciót mondja meg, hol található az elem. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve adott egy T feltétel. index, i : egész i := 1 Ciklus amíg i <= n ÉS NEM(T feltétel) i := i + 1 CV. Ha i <= n akkor index := i EV. Kis Balázs 52
Eldöntés Csak úgy ahogy a lineáris keresés, és a kiválasztás tétele, ez is egy elemet keres a sorozatban, azonban csak megmondja, hogy létezik-e az elem. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve adott egy T feltétel. i : egész van : logikai van := hamis i := 1 Ciklus amíg i <= n ÉS NEM(T feltétel) i := i + 1 CV. van := i <= n Kis Balázs 53
Szétválogatás A szétválasztás tétele, egy tömb elemeit szeparálja egy bizonyos feltétel szerint. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve adott egy T feltétel. a, b, i : egész atomb : egész[1..n] btomb : egész[1..n] a := 1 b := 1 Ciklus i := 1-től n-ig Ha (T feltétel igaz tomb[i]-re) akkor atomb[a] := tomb[i] a := a + 1 Különben btomb[b] := tomb[i] b := b + 1 EV. CV. Kis Balázs 54
Bináris keresés I. Más néven Logaritmikus keresés Olyan keresési metódus, mely folyamatosan felezi az intervallumot, ezzel közelítve az értéket. Fontos, hogy a tömbnek rendezettnek kell lennie, mivel a rendezettség alapelve a keresési metódusnak. A keresést úgy végzi el, hogy megfelezi az intervallumot, majd megnézi, hogy melyik fél intervallumba esik az érték, majd amelyikbe esik, azt újrafelezi Kis Balázs 55
Bináris keresés II. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött rendezett tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve létezik egy keresett nevű érték, melyben a keresett érték szerepel. e, u, k, index : egész e := 1 u := n Ciklus k := [(e + u) / 2] Ha tomb[k] < keresett akkor e := k + 1 Különben Ha tomb[k] > keresett akkor u := k 1 EV. Amíg (e <= u) ÉS (keresett <> tomb[k]) Ha e <= u akkor index := k EV. Kis Balázs 56
Megszámlálás Megszámolja, hogy hány előfordulása van egy tömbben egy bizonyos feltételnek eleget tevő értéknek. Előfeltétel: Létezik egy tetszőleges, de összehasonlítható adatokkal feltöltött tomb nevű tömb és elemszáma egy n nevű változóban van tárolva, illetve adott egy T feltétel. ossz : egész ossz := 0 Ciklus i := 1-től n-ig akkor Ha (T feltétel igaz tomb[i]-re) akkor ossz := ossz + 1 EV. CV. Kis Balázs 57
Programozási tételek VI. Természetesen ezek az alapvető programozási tételek, ezeken kívül még igen sok tétel létezik. Kis Balázs 58
Feladat VIII. Készítsünk programot, mely bekér egy számot, majd annyi nevet és jegyet kér be, amennyit beírtunk. Ezeket letárolja és kiírja a képernyőre az átlagot, illetve kiírja a képernyőre a legjobb és a legrosszabb jegy tulajdonosát. Kis Balázs 59
Feladat IX. Írjunk programot, amely bekér neveket egymás után és a következőkre válaszol: Hány M betűvel kezdődő név van Van-e Jakab nevű ember A program keresse meg az első M betűvel kezdődő nevet, és az előtte lévőket válogassa ki egy külön tömbbe, az utána lévőket ugyancsak. Kis Balázs 60
Feladat X. A Lineáris keresés és a Bináris keresés egymáshoz képest más lefutási idővel rendelkezik. Írjunk programot, mely egy rendezet tömböt tartalmaz, és futtatja mindkét keresést rajta ugyan arra az elemére. A program számolja meddig fut a két keresés. Tipp Stopwatch osztály Kis Balázs 61
Procedurális programozás A Procedurális programozási technika tulajdonságai, használata. Kis Balázs 62
Procedurális programozás A Procedurális programozás, egy a szoftverkrízis után kifejlődött programozási technika, mely elősegítette a szoftver termékek minőségének emelését, illetve az újrahasznosíthatóságot is. Elmélete alapján, a programot kisebb alprogramok (metódusok és funkciók) építik fel, melyek egymástól különállóan vannak implementálva, azonban együttes működésük adja a szoftver működését. Kis Balázs 63
Metódus Olyan különálló programblokk, mely műveleteket végez a beadott paraméterek alapján. Pl.: A WriteLine egy olyan metódus, ami kiír valamit a konzolra Kis Balázs 64
Metódusok C#-ban C#-ban az alábbiak szerint épülnek fel a metódusok: void <metódusneve>(<paraméterek>) { //programkód.. } Pl.: void OsszeadesKiir(int szam1, int szam2) { Console.WriteLine(szam1 + szam2); } Kis Balázs 65
Funkció Olyan különálló programblokk, mely műveleteket végez a beadott paraméterek alapján, majd valamilyen típusú visszatérési értékkel térnek vissza. Fontos, hogy szigorúan típusos nyelvek esetén mindig kell visszatérése legyen egy funkciónak. A fejlesztőkörnyezet, addig nem hajlandó fordítani a programot, míg nincs minden esetben visszatérési érték. Kis Balázs 66
Funkciók C#-ban C#-ban az alábbiak szerint épülnek fel a funkciók: <visszatérési típus> <funkcióneve> (<paraméterek>) { //programkód és visszatérés } Pl.: int Osszead(int szam1, int szam2) { return szam1 + szam2; } Kis Balázs 67
Metódusok és Funkciók I. A fejlesztés során megírt funkcióinkat könnyedén használhatjuk a program futása során az alábbi szabályok szerint: A meghíváskor, minden esetben kell () a függvény, vagy metódus végére, még akkor is ha nincs paraméter! Pl.: Az előző Osszead funkció használata gyakorlatban: Console.WriteLine(Osszead(3,6)); int szamom = Osszead(3,6); Kis Balázs 68
Metódusok és Funkciók II. Természetesen, metódusoknak nincs visszatérési értékük, így azokat ily módon nem használhatjuk. Metódusokat olyan esetben használjuk, mikor nincs szükségünk visszajelzésre a lefuttatott programkód után. Kis Balázs 69
Feladat XI. Készítsünk funkciót, mely a négy matematikai alapműveletet képes végrehajtani két szám között. Készítsünk programot, mely bekér 2 számot és a műveletet, majd elvégezteti a funkcióval azt, és kiírja az eredményt a képernyőre. Kis Balázs 70
Feladat XII. Készítsünk funkciót, mely bekér egy szöveget, melyet ékezetmentessé alakít. Kis Balázs 71
Rekurzió I. Ahhoz, hogy megértsük a rekurziót, előbb meg kell értenünk a rekurziót. A rekurzió olyan alprogramhívás, mely során az alprogram saját magát hívja meg egy bizonyos feltétel szerint. Ez egészen addig megy, míg egy bizonyos feltétel ki nem ugrasztja a meghívási körből. Valamilyen feltételre szükség van, különben mindig visszahívná önmagát. Általában a paraméter(ek) értéke(i) változik. Kis Balázs 72
Rekurzió II. Példa: <visszatérési típus / void> <alprogramneve>(<paraméterek>) { //programkód <alprogramneve>(<paraméterek>); } Valójában olyan, mint egy alprogramhívásokkal összerakott ciklus. Használata hasznos lehet egyes esetekben, mikor ciklussal túlságosan körülményes lenne megoldani egyes feladatokat. Pl.: Fibonacci számsorozat egy elemének megadása. Kis Balázs 73
Rekurzió III. A rekurzió megjelenik a grafikában is. A fraktálok rekurzív grafikai alakzatok: Kis Balázs 74
Feladat XIII. Készítsünk rekurzív funkciót, mely a Fibonacci számsorozat n-dik elemét képes visszaadni. Tipp: Fibonacci számsornak hívjuk azt a számsort, melynek minden eleme az előző két elem összege. Tehát a Fibonacci n- edik eleme az n-1 és az n-2 elemek összege. 1,1,2,3,5,8,13,21,34,55,89 Kis Balázs 75
Önállófeladat Készítsünk programot, mely képes autókat rendszámuk alapján letárolni, illetve hozzájuk tartozó állapot értéket (0..100) A rendszerbe lehessen őket felvinni kézileg A végén adja meg, hogy melyik autó van a legrosszabb állapotban. A számítást egy funkció végezze el! Kis Balázs 76