Algoritmusok, adatszerkezetek, objektumok 1. előadás Sergyán Szabolcs sergyan.szabolcs@nik.uni-obuda.hu Óbudai Egyetem Neumann János Informatikai Kar 2011. szeptember 14. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 1 / 33
Tantárgy célja 1 Algoritmikus gondolkodás kialakítása, egyszerű algoritmusok megismerése 2 Az objektumorientált programozási paradigma alapjainak megismerése Sergyán (OE NIK) AAO 01 2011. szeptember 14. 2 / 33
Tananyag felépítése 1 Algoritmus, algoritmus leírási módjai 2 Strukturált programozás, vezérlési szerkezetek 3 Programozási tételek 4 Objektum orientált programozás 1 Osztály, objektum 2 Mező, metódus 3 Konstruktor, destruktor 4 Egységbezárás, láthatóság 5 Statikus tagok 5 Rendezési algoritmusok 6 Logaritmikus keresés 7 Halmazműveletek 8 Rekurzió 9 További algoritmusok Sergyán (OE NIK) AAO 01 2011. szeptember 14. 3 / 33
Aláírás feltétele Zárthelyi írása az utolsó előadáson >= 40% esetén aláírás <= 20% esetén letiltás egyébként pótlási lehetőség a vizsgaidőszak elején Sergyán (OE NIK) AAO 01 2011. szeptember 14. 4 / 33
Vizsgajegy Aláírás birtokában lehet vizsgára jelentkezni Ponthatárok Teljesítmény % Érdemjegy 88 100 jeles (5) 76 87 jó (4) 64 75 közepes (3) 51 63 elégséges (2) 0 50 elégtelen (1) Sergyán (OE NIK) AAO 01 2011. szeptember 14. 5 / 33
Ajánlott irodalom Cormen, Leiserson, Rivest, Stein: Új algoritmusok. Scolar Kiadó, 2003 http://nik.uni-obuda.hu/sergyan/aao Sergyán (OE NIK) AAO 01 2011. szeptember 14. 6 / 33
Mi az az algoritmus? 1957 előtt nem lehetett megtalálni az algorithm szót a Webster s szótárban. Az algorism szó volt a szótárban, melynek jelentése: aritmetikai eljárások elvégzése arab számokkal. Az első algoritmus, amivel találkozhatunk, az Euklideszi algoritmus volt. Mai deficíció Jól meghatározott számítási eljárás, amelynek bemenete egy bizonyos érték vagy értékhalmaz, és amely létrehoz valamilyen értéket vagy értékhalmazt kimenetként. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 7 / 33
Példa (1) Kávéautomata 1 Válaszd ki, amit inni akarsz! 2 Dobj be pénzt! 3 Ha nem elég a bedobott pénz, akkor menj a 2. lépésre! 4 Várd amíg elkészül a kávé! 5 Vedd el a kávét! 6 Vedd el a visszajáró pénzt! Sergyán (OE NIK) AAO 01 2011. szeptember 14. 8 / 33
Példa (2) Nem indul a motor 1 Ellenőrizd a benzintankot. Ha nincs benne benzin, akkor töltsd tele. 2 Ha még mindig nem indul, akkor ellenőrizd az akkumulátort. Ha nincs megfelelően feltöltve, akkor töltsd fel. 3 Ha még mindig nem indul, ellenőrizd a gyertyát. Ha szükséges, cseréld ki. 4 Ha még mindig nem indul, vidd el szerelőhöz. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 9 / 33
Példa (3) Euklideszi algoritmus Bemenet: Két pozitív egész szám: m és n. Kimenet: A legnagyobb egész szám, amely m-nek és n-nek is osztója. Algoritmus 1 Osszuk el m-et n-nel és legyen r az osztási maradék. 2 Ha r = 0, akkor véget ér és n a kimenet. 3 Egyébként m = n és n = r. m n r 120 48 24 48 24 0 4 Ugrás az 1. lépésre. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 10 / 33
Az algoritmusokkal szembeni elvárások Végesség: Véges számú lépést követően véget kell érnie az algoritmusnak. Meghatározottság: Az algoritmus minden egyes lépését minden lehetséges esetre precízen definiálni kell. Bemenet: Egy algoritmusnak nulla vagy annál több bemenete lehet, amik az algoritmus kezdetekor ismertek. Kimenet: Egy algoritmusnak egy vagy több kimenete van, amelyek meghatározott viszonyban vannak az algoritmus bemeneteivel. Hatékonyság: Egy számítógép által végrehajtott algoritmustól elvárt, hogy gyorsabban működjön mintha számítógép nélkül hajtottuk volna végre. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 11 / 33
Algoritmus leíró eszközök 1 Mondatok 2 Blokkdiagram 3 Struktogram 4 Jackson ábra 5 Pszeudokód 6 Programnyelv Sergyán (OE NIK) AAO 01 2011. szeptember 14. 12 / 33
Blokkdiagram Sergyán (OE NIK) AAO 01 2011. szeptember 14. 13 / 33
Struktogram Sergyán (OE NIK) AAO 01 2011. szeptember 14. 14 / 33
Pszeudokód Be: m, n r := m mod n Ciklus amíg r 0 m := n n := r r := m mod n Ciklus vége Ki: n Sergyán (OE NIK) AAO 01 2011. szeptember 14. 15 / 33
Vezérlési szerkezetek 1 Szekvencia 2 Elágazás 3 Ciklus Sergyán (OE NIK) AAO 01 2011. szeptember 14. 16 / 33
Szekvencia (1) Egy utasítást közvetlenül egy másik után végzünk el. Jelölése blokkdiagramban: Sergyán (OE NIK) AAO 01 2011. szeptember 14. 17 / 33
Szekvencia (2) Jelölése struktogramban: Jelölése pszeudokódban: S 1 S 2 Sergyán (OE NIK) AAO 01 2011. szeptember 14. 18 / 33
Elágazás (1) Adott 2 darab feltétel-program páros, az igaz feltételekhez tartozó programok végrehajtása Jelölése blokkdiagramban: Sergyán (OE NIK) AAO 01 2011. szeptember 14. 19 / 33
Elágazás (2) Jelölése struktogramban: Jelölése pszeudokódban: Ha L akkor S 1 különben S 2 Elágazás vége Sergyán (OE NIK) AAO 01 2011. szeptember 14. 20 / 33
Ciklus (1) Megadott feltétel teljesülése esetén egy program (ciklusmag) többszöri végrehajtása Jelölése struktogramban: Sergyán (OE NIK) AAO 01 2011. szeptember 14. 21 / 33
Ciklus (2) A programozás nyelvek általában többféle ciklust ismernek, ennek megfelelően a pszeudokódban is többfélét használunk. Elöltesztelős ciklus Hátultesztelős ciklus Számlálós ciklus Ciklus amíg L S Ciklus vége Ciklus S Ciklus amíg L Ciklus i = i 0 -tól i 1 -ig S(i) Ciklus vége Sergyán (OE NIK) AAO 01 2011. szeptember 14. 22 / 33
Strukturált programozás Strukturált programnak tekintjük azokat a programokat, amelyek csak a megengedett elemi programokat tartalmazzák a megengedett programkonstrukciók (vezérlési szerkezetek) alkalmazásával. Elemi programok üres program értékeadás (állapot változtatás) Megengedett konstrukciók szekvencia elágazás ciklus Bizonyítható, hogy a fenti szabályok megtartásával minden algoritmussal megoldható feladatra adható megoldás. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 23 / 33
Moduláris programozás Az elkészítendő programot egyetlen utasítással szeretnénk megoldani. Ha ez nem sikerül, akkor több utasítással próbálkozunk, melyek egyes részfeladatokat valósítanak meg. Addig folytatjuk ezt a részfeladatokra bontást, míg minden részfeladatot sikerül megvalósítani elemi utasítások felhasználásával. Összefoglalva: A teljes feladatot részekre bontjuk, majd ezeket a visszavezetés módszerével megoldjuk. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 24 / 33
Moduláris programozás A moduláris programozást az alábbi Jackson ábra szemlélteti. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 25 / 33
Moduláris programozás megvalósítása A moduláris programozást pl. függvények (illetve eljárások) hívásával tudjuk megvalósítani. A függvények önálló részprogramok, melyeknek lehetnek bemenetei és visszatérési értékei. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 26 / 33
Változók Az algoritmusok megvalósításához változókra van szükségünk (ld. Euklideszi algoritmus) Az egyes változóknak az algoritmusok számítógépes implementációjánál típust kell megfeleltetni. Sok esetben az alkalmazott változó típustól függ, hogy milyen algoritmussal oldható meg egy probléma. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 27 / 33
Elemi változó típusok Egész típusok Hány bájton ábrázolva? Előjeles/előjel nélküli? Lebegőpontos típusok Hány bájton ábrázolva? Vigyázat! Nem ábrázolható minden valós szám! Karakter típus(ok) Logikai típus Sergyán (OE NIK) AAO 01 2011. szeptember 14. 28 / 33
Összetett típusok Tömbök Stringek Struktúrák Halmazok Objektumok... Sergyán (OE NIK) AAO 01 2011. szeptember 14. 29 / 33
Változók jellemzői Élettartam Statikus/dinamikus Konstans/változtatható Hatókör (lokális/globális) Függvény paramétereként érték/cím szerint átadott Sergyán (OE NIK) AAO 01 2011. szeptember 14. 30 / 33
Algoritmus lépésszáma Egy algoritmus lépésszáma alatt azt értjük, hogy hány elemi műveletet (értékadás, összehasonĺıtás, beolvasás, kiiratás, stb.) kell végrehajtani adott bemenet mellett. Egy algoritmus futási ideje függ az algoritmust megvalósító programtól, a programozási nyelvtől, a számítógéptől, stb. Algoritmuselméletben a futási időt a lépésszámmal jellemezzük. A lépésszám bemenettől függő jellemzésére használatos a nagy ordó (O) jelölés. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 31 / 33
Nagy ordó Legyenek f (x) és g(x) egyváltozós függvények. f (x) = O(g(x)) akkor és csak akkor, ha léteznek olyan M és x 0 pozitív valós számok, hogy minden x > x 0 esetén f (x) M g(x). Sergyán (OE NIK) AAO 01 2011. szeptember 14. 32 / 33
Feladatok 1 Írjuk le a másodfokú egyenlet megoldási algoritmusát folyamatábrával, struktogrammal és pszeudokóddal. 2 Adott két síkbeli pont: P 1 (x 1, y 1 ) és P 2 (x 2, y 2 ). Keressük a P 1 -en és P 2 -n áthaladó egyenesen az x 0 abszisszájú pont y 0 koordinátáját. Adjon algoritmust a feladat megoldására. 3 Készítsen algoritmust, mely eldönti, hogy egy adott év szőkőév-e vagy sem. 4 Készítsen algoritmust, mely megadja, hogy egy adott év adott hónapja hány napból áll. 5 Készítsen algoritmust, amely egy pozitív egész számról eldönti, hogy prím-e vagy sem. 6 Készítsen algoritmust, amely bekéri egy tankör zh eredményeit, majd kiszámítja azok átlagát. Sergyán (OE NIK) AAO 01 2011. szeptember 14. 33 / 33