Készítette: Nagy Tibor István Felhasznált irodalom: Kotsis Domokos: OOP diasor Zsakó L., Szlávi P.: Mikrológia 19.
Programkészítés Megrendelői igények begyűjtése Megoldás megtervezése (algoritmuskészítés) Megoldás megvalósítása (implementálás) Tesztelés
Algoritmus Algoritmus kritériumai: Elemi lépésekre kell bontani (elemi lépés = az algoritmus végrehajtója számára egyértelmű, végrehajtható utasítás) Az összes lehetséges esetet számba kell venni Véges sok lépésből kell állnia
Algoritmusleíró eszközök Mondatokkal történő leírás Teljes magyar mondatokkal íródik az algoritmus Mondatszerű elemekkel történő leírás (pszeudo-kód) Kulcsszavakkal és az ezekből felépített tőmondatokkal íródik az algoritmus Blokk-diagram Irányított gráf ábrázolja az algoritmust Struktogram A teljes feladat egy téglalap, ennek részekre osztásával íródik az algoritmus
Algoritmusokban használt strukturált elemek Másnéven strukturált algoritmikus szerkezetek, vagy vezérlőszerkezetek: Szekvencia (utasítássorozat) : tevékenységek egymásutánja Szelekció (elágazás) : egy feltétel teljesülése, vagy nem teljesülése esetén más-más tevékenységeket kell elvégezni Iteráció (ciklus) : egy tevékenységet, vagy tevékenységsorozatot többször meg kell ismételni A vezérlőszerkezetek egymásba is ágyazhatók
Blokk-diagram Szekvencia (utasítássorozat) utasítás1 utasítás2 utasítás3
Blokk-diagram Szelekció (elágazás) i feltétel n utasítás1 utasítás2
Blokk-diagram Iteráció (elöltesztelős ciklus) Nincs külön jelölés a ciklusra. Elágazással lehet megvalósítani. i feltétel n utasítás(ok)
Blokk-diagram Iteráció (hátultesztelős ciklus) Nincs külön jelölés a ciklusra. Elágazással lehet megvalósítani. utasítás(ok) i feltétel n
Példa Rablóbanda Feladat: Egy rablóbanda az erdőben les gazdag áldozataira. A gazdasági fellendülés következtében megnőtt az erdei úton közlekedő, kincsekkel megrakott konvojok száma, ezért szükségessé vált a bandát új taggal bővíteni. Az új tagnak el kell magyarázni a rablás folyamatát.
A rablás algoritmusa I. Bunkót kézbe Leshelyre ki i Lesés Jön karaván? n És ha nem volt a karavánnál pénz? Kirablás Kocsma Haza
A rablás algoritmusa II. Bunkót kézbe Leshelyre ki i Lesés Jön karaván? n És ha nem is jött karaván? Kirablás n Elég a pénz? i Kocsma Haza
A rablás algoritmusa III. Bunkót kézbe Leshelyre ki n Este van? Lesés i Ez már jó, de kusza Kirablás i Jön karaván? n n Elég a pénz? i Kocsma Haza
Struktogram Szekvencia (utasítássorozat) utasítás1 utasítás2 utasítás3 vagy utasítás1 utasítás2 utasítás3
Struktogram Szelekció (elágazás) i feltétel n utasítás2 utasítás3 vagy i feltétel n utasítás2
Struktogram Iteráció (ciklus) feltétel utasítás(ok) vagy utasítás(ok) feltétel
A rablás algoritmusa Bunkót kézbe Leshelyre ki Amíg nincs este és nem elég a pénz Lesés i Jön karaván? n Kirablás i Elég a pénz? n Kocsma Haza
Pszeudo-kód Szekvencia (utasítássorozat) Formátum: utasítás1 utasítás2 utasításn Az utasítások végrehajtása leírásuk sorrendjében történik
Pszeudo-kód Szelekció (elágazás) Formátum: Ha feltétel akkor utasítás(ok)1 különben utasítás(ok)2 Elágazás vége Ha a feltétel igaz, akkor utasítás(ok)1, különben utasítás(ok)2 hajtódik végre A feltétel logikai igaz, vagy hamis értékű lehet utasítás(ok)1 az elágazás igaz-ága, utasítás(ok)2 az elágazás hamis-ága. A hamis-ág elhagyható
Pszeudo-kód Szelekció (többirányú elágazás) Formátum: Elágazás feltétel1 esetén utasítás(ok)1 feltétel2 esetén utasítás(ok)2 különben utasítás(ok)n Elágazás vége Ha feltétel1 igaz, akkor utasítás(ok)1, ha feltétel2 igaz, akkor utasítás(ok)2, ha egyik feltétel sem igaz, utasítás(ok)n hajtódik végre Minden feltétel logikai igaz, vagy hamis értékű lehet A különben-ág elhagyható
Pszeudo-kód Iteráció (elöltesztelős ciklus) Formátum: Ciklus amíg feltétel Ciklusmag Ciklus vége A ciklusmag utasításai addig ismétlődnek, amíg a feltétel igaz
Pszeudo-kód Iteráció (hátultesztelős ciklus) Formátum: Ciklus Ciklusmag amíg feltétel Ciklus vége A ciklusmag utasításai addig ismétlődnek, amíg a feltétel igaz A ciklusmag egyszer mindenképp végrehajtódik a feltétel-től függetlenül
Pszeudo-kód Iteráció (számlálós ciklus) Formátum: Ciklus változó = kezdőérték-től végérték-ig Ciklusmag Ciklus vége A ciklusmag utasításai kezdőérték-végérték+1-szer ismétlődnek A változó értéke kezdetben kezdőérték-kel egyenlő, minden cikluslépés végén 1-gyel nő, amíg végértéknél nagyobb nem lesz
A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke egy kifejezésben lekérdezhető
Változókkal végezhető tevékenységek Értékadás Érték elhelyezése a változóban változónév = érték változónév = kifejezés Érték lekérdezése A változó tartalmának kiolvasása. Az érték a kiolvasás után is megmarad a változóban. Pl.: Ha változónév > 10 akkor változó2 = 3 * változónév + 12
Feladat másodfokú egyenlet megoldása ax 2 + bx + c = 0 a = 0 bx + c = 0 a 0 ax 2 + bx + c = 0 b = 0 c = 0 c = 0 Azonosság b 0 x = c b c 0 Ellentmondás b 2 4ac < 0 x 1,2 = b ± b 2 4ac > 0 b2 4ac 2a b 2 4ac = 0 x 1,2 = b 2a x 1,2 = b 2a ± b2 4ac 2a j
Feladat másodfokú egyenlet megoldása i a = 0 n i b = 0 n i b 2 4ac = 0 n i c = 0 n Azon. Ellentm. x = c b x 1,2 = b 2a i x 1,2 = b ± b 2 4ac > 0 b2 4ac 2a x 1,2 = b 2a ± n b2 4ac j 2a
Algoritmusok specifikációja Négy részből áll: Bemenet: az algoritmusnak milyen bemenő adat(ok)ra van szüksége Kimenet: az algoritmus milyen eredmény(eke)t állít elő Előfeltétel: a bemenő adatok milyen feltételeknek kell, hogy eleget tegyenek ahhoz, hogy az algoritmus helyesen tudjon működni Utófeltétel: Milyen feltételeknek tesz eleget a kimenet az algoritmus végrehajtása után, vagy másképpen: hogyan állítja elő az algoritmus a bemenő adatokból a kimenetet
Feladat másodfokú egyenlet megoldása specifikációval Bemenet: a, b, c R Kimenet: x 1, x 2 C Előfeltétel: - Utófeltétel: i a = 0 n i b = 0 n i b 2 4ac = 0 n i c = 0 n Azon. Ellentm. x = c b x 1,2 = b 2a i x 1,2 = b ± b 2 4ac > 0 b2 4ac 2a x 1,2 = b 2a ± n b2 4ac j 2a
Feladatok 1. Adott a, b, c oldalhossz. Állapítsuk meg, hogy a három oldal milyen háromszöget alkot. Adott a, b, c oldalhossz. Adjuk meg a háromszög kerületét és területét. Adott x és y. Adjuk meg x * y értékét az + művelet felhasználásával. Adott a és x. Adjuk meg a x értékét, a * művelet felhasználásával Adott a és x. Adjuk meg a x értékét, az + művelet felhasználásával
Feladatok 2. Adott x és y. Határozzuk meg a két szám legkisebb közös többszörösét. Adott x és y. Határozzuk meg a két szám legnagyobb közös osztóját. Adott x. Mondjuk meg, hogy x prímszám-e.
Feladatok 3. Egy meteorológiai állomáson mérik a napi középhőmérséklet-értékeket egy hónapon keresztül. Írjuk ki azoknak a napoknak a sorszámát, amikor: a hőmérséklet fagypont alatt volt a leghidegebb volt a legmelegebb volt
Feladatok 4. Egy toronyugró versenyen N versenyző indul. Minden versenyzőnek egy ugrásra van lehetősége. Az ugrásokat 7 bíró pontozza. Egy ugrás összpontszáma a pontok összegéből számítódik, amelyben a legkisebb és a legnagyobb pont nincs benne. Az a versenyző győz, aki a legtöbb pontot kapta az ugrására. Adjuk meg ennek a versenyzőnek a nevét! (Tételezzük fel, hogy van egy utasítás, amellyel a versenyző nevét és a bírói pontokat tudjuk bekérni)
A tömb Több, memóriában elhelyezkedő rekesz együttese Több, azonos típusú értéket tárol Elemei a tömbön belüli sorszámukkal (index) érhetők el Egy elem értéke értékadással módosítható Egy elem értéke egy kifejezésben lekérdezhető
Tömbbel végezhető tevékenységek Értékadás Érték elhelyezése egy tömbelemben Érték lekérdezése Egy tömbelem tartalmának kiolvasása. Az érték a kiolvasás után is megmarad a tömbelemben
Tömbelem elérése (indexelés) A tömb egy adott eleméhez a tömb neve után szögletes zárójelek között megadott sorszámmal (index) férhetünk hozzá: tömbnév[index] A tömb első elemének indexe: 0 A tömb utolsó elemének indexe: elemszám 1 0. 1. 2. 3. 4. tomb 28 3 17 11 50 tomb[3]
Feladatok Egy meteorológiai állomáson mérik a napi középhőmérséklet-értékeket egy hónapon keresztül. Tároljuk el ezeket az értékeket egy tömbben valósítsuk meg a feladatot mindhárom ciklusfajtával Határozzuk meg a havi átlaghőmérsékletet Írjuk ki azoknak a napoknak a hőmérsékletét, amikor hidegebb volt a havi átlagnál Írjuk ki azoknak a napoknak a hőmérsékletét, amikor fagyott Írjuk ki azoknak a napoknak a számát, amikor fagyott
Programozási tételek Egy adott feladatosztályba tartozó összes feladatra megoldást adó algoritmus. pl.: a keresés tétel bármilyen elemsorozatban bármilyen feltételnek megfelelő elemek keresésére használható
Programozási tételek alkalmazott jelölések H : valamilyen (azonos) típusú elemek halmaza. Például H lehet a természetes számok halmaza, vagy a karakterek halmaza, H N : H összes lehetséges N elemű részsorozata Például: N 3 = * 0,1,2, 1,0,2, 1,2,0, 1,1,1, +
Programozási tételek alkalmazott jelölések T: H L igaz, a a megfelel a tulajdonságnak T a = amis, egyébként Például: T a = vagy T a = igaz, a a < 0 amis, egyébként igaz, a a páros amis, egyébként
Eldöntés tétele Adott egy N elemű sorozat és egy a sorozaton értelmezett T tulajdonság. Mondjuk meg, hogy a sorozatban van-e T tulajdonságú elem. Bemenet: N N, A H N Kimenet: VAN L Előfeltétel:- Utófeltétel: VAN ( i 0 i < N : T A i ) Algoritmus Eldöntés: i = 0; Ciklus amíg i<n és T(A[i]) i = i + 1 Ciklus vége VAN = i<n Algoritmus vége
Kiválasztás tétele Adott egy N elemű sorozat és egy a sorozaton értelmezett T tulajdonság. Biztosan tudjuk, hogy a sorozatban van T tulajdonságú elem. Mondjuk meg az első ilyen elem sorszámát. Bemenet: N N, A H N Kimenet: SORSZ N Előfeltétel: i 0 i < N : T(A i ) Utófeltétel: 0 SORSZ < N és T(A SORSZ ) Algoritmus Kiválasztás: i = 0; Ciklus amíg T(A[i]) i = i + 1 Ciklus vége SORSZ = i Algoritmus vége
Lineáris keresés tétele Adott egy N elemű sorozat és egy a sorozaton értelmezett T tulajdonság. Mondjuk meg, hogy van-e T tulajdonságú elem a sorozatban, és adjuk meg az első ilyen elem sorszámát. Bemenet: N N, A H N Kimenet: VAN L, SORSZ N Előfeltétel: - Utófeltétel: VAN i 0 i < N : T A i és VAN (0 SORSZ < N és T A SORSZ ) Algoritmus Keresés: i = 0; Ciklus amíg i<n és T(A[i]) i = i + 1 Ciklus vége VAN = i<n Ha VAN akkor SORSZ = i Algoritmus vége
Megszámlálás tétele Adott egy N elemű sorozat és egy a sorozaton értelmezett T tulajdonság. Mondjuk meg, hogy hány T tulajdonságú elem van a sorozatban. Bemenet: N N, A H N, U x = Kimenet: DB N Előfeltétel: - Utófeltétel: DB = N U(A i ) i=1 Algoritmus Megszámlálás: DB = 0 Ciklus i = 0-től N-1-ig Ha T(A[i]) akkor DB = DB + 1 Ciklus vége Algoritmus vége 1, a T(x) 0, egyébként
Maximumkiválasztás tétele Adott egy N elemű sorozat. Mondjuk meg a sorozat legkisebb elemének sorszámát. Bemenet: N N, A H N Kimenet: maxindex N Előfeltétel: X teljesen rendezett és N>0 Utófeltétel: 0 maxindex < N és i 0 i < N : A maxindex A i Algoritmus Maximumkiválasztás: maxindex = 0 Ciklus i = 1-től N-1-ig Ha A[i] > A[maxindex] akkor maxindex = i Ciklus vége Algoritmus vége
Programkészítés lépései Megrendelői igények begyűjtése Megoldás megtervezése (algoritmuskészítés) Megoldás megvalósítása (implementálás) Tesztelés
Implementálás (parancssorból) 1. Algoritmus C# Forráskód 1. Forráskód megírása szövegszerkesztőben 2. Forráskód elmentése fájlnév.cs néven 2. C# forráskód Futtatható fájl (.exe) 1. Parancssori ablak megnyitása 2. Belépés a forráskódot tartalmazó könyvtárba (cd) 3. Forrásfájl lefordítása (csc fájlnév.cs) 3. Futtatható fájl végrehajtása 1. Parancssori ablak megnyitása 2. Program futtatása (fájlnév.exe)
Üres C# program class ProgramNév { static void Main() { } }
C# utasítások szekvencia Minden utasítást ; zár le Az utasítások írhatók külön sorokba: utasítás1; utasítás2; utasításn; Az utasítások írhatók egy sorba: utasítás1; utasítás2; utasításn;
C# utasítások szelekció if ( feltétel ) utasítás1; [else utasítás2;] if ( feltétel ) { utasítás1; utasítás2; } else { utasítás3; utasítás4; } else ág elhagyható Több utasítás esetén kötelező a { }
C# utasítások szelekció if ( feltétel1 ) utasítás1; [else if ( feltétel2 ) utasítás2; [else if ( feltétel3 ) utasítás2; ] [else utasításn; ] else ág elhagyható Több utasítás esetén kötelező a { } else if ágakból tetszőleges számú használható
C# utasítások szelekció switch( kifejezés ) { case érték1 : utasítás(ok)1; break; case érték2 : utasítás(ok)2; break; [default: utasítás(ok)n; break;] } Ha a kifejezés értéke = érték1, akkor utasítás(ok)1, = érték2, akkor utasítás(ok)2, hajtódik végre Ha kifejezés értéke egyik case-ben megadottal sem egyenlő, akkor utasítás(ok)n hajtódik végre
C# utasítások iteráció while ( feltétel ) utasítás; while ( feltétel ) { utasítások; } Amíg a feltétel igaz, utasítások újra és újra végrehajtódik Ha a ciklusmagban több utasítás van, kötelező a { }
C# utasítások iteráció do { utasítás(ok); } while ( feltétel ); Amíg a feltétel igaz, utasítás(ok) újra és újra végrehajtódik Mindig kötelező a { }
C# utasítások iteráció for ( inicializáló_rész; feltétel; módosító_rész ) { } utasítások; Amíg a feltétel igaz, utasítások újra és újra végrehajtódik Több utasítás esetén kötelező a { } inicializáló_rész: ciklusváltozó(k) inicializálása módosító_rész: ciklusváltozó(k) értékének módosítása A zárójelek közti három rész közül egyiket sem kötelező megadni (végtelen ciklus)
C# utasítások iteráció foreach (típus ciklusváltozó in gyűjtemény) { } utasítások; A gyűjtemény (pl. tömb) összes elemén végiglépked Több utasítás esetén kötelező a { } A ciklusváltozó minden cikluslépésben a gyűjtemény aktuális elemének értékét tartalmazza ciklusváltozó a ciklusban nem változtatható meg gyűjteményből elemet törölni, vagy új elemet felvenni a cikluson belül nem lehet!