Programozás Alapjai 2.

Hasonló dokumentumok
C# tanfolyam I. A.Net keretrendszer, programozási technikák és alapismeretek. Kis Balázs

A C# programozási nyelv alapjai

A C# PROGRAMOZÁSI NYELV

Informatika terméktervezőknek

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Webprogramozás szakkör

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

INFORMATIKA javítókulcs 2016

Programozás alapjai 9.Gy: Struktúra 2.

Java programozási nyelv

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

1. Jelölje meg az összes igaz állítást a következők közül!

Felvételi tematika INFORMATIKA

Szoftvertervezés és -fejlesztés I.

Internet programozása. 3. előadás

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Bevezetés a programozásba I.

Algoritmizálás + kódolás C++ nyelven és Pascalban

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Java II. I A Java programozási nyelv alapelemei

Szoftvertechnológia alapjai Java előadások

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Mintavételes szabályozás mikrovezérlő segítségével

Maximum kiválasztás tömbben

Objektum Orientált Programozás VII.

Programozás alapjai 8.Gy: Program struktúra

1. Alapok. #!/bin/bash

Vezérlési szerkezetek

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Programozási alapismeretek 3.

INFORMATIKAI ALAPISMERETEK

Programozás I. gyakorlat

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Algoritmusok, adatszerkezetek, objektumok

INFORMATIKAI ALAPISMERETEK

Objektumorientált Programozás V.

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

BASH script programozás II. Vezérlési szerkezetek

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

10. gyakorlat Tömb, mint függvény argumentum

Adatszerkezetek és algoritmusok

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

OOP: Java 1.Gy: Java alapok

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

BME MOGI Gépészeti informatika 5.

Készítette: Nagy Tibor István

Objektum Orientált Programozás V.

Programozás III A JAVA TECHNOLÓGIA LÉNYEGE. Többlépcsős fordítás JAVA PLATFORM. Platformfüggetlenség

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Adatbázis rendszerek Gy: Algoritmusok C-ben

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Programozási nyelv Java

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

C# feladatok gyűjteménye

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

Adatbázis és szoftverfejlesztés elmélet

Előfeltétel: legalább elégséges jegy Diszkrét matematika II. (GEMAK122B) tárgyból

Bevezetés a programozásba I.

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Programozási alapismeretek 1. előadás

Szoftvertervezés és -fejlesztés I.

Szövegek C++ -ban, a string osztály

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Python tanfolyam Python bevezető I. rész

PASzSz. Dr. Kotsis Domokos

Objektumorientált Programozás III.

Gyakorló feladatok az 1. nagy zárthelyire

Kalapácsvetés 2016 szöveges

3. Osztályok II. Programozás II

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

A szerzõrõl... xi Bevezetés... xiii

Podoski Péter és Zabb László

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Bevezetés a programozásba. 8. Előadás: Függvények 2.

1. Alapok. Programozás II

Bevezetés a programozásba I 4. gyakorlat. PLanG: Szekvenciális fájlkezelés. Szekvenciális fájlkezelés Fájlok használata

Programozási tételek. Dr. Iványi Péter

Programozás I. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar szeptember 10.

Összetett programozási tételek

Átírás:

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