algoritmusok, adatszerkezetek, objektumokalgoritmusok, adatszerkezetek, objektumok 1. el}oad as...

33
Algoritmusok, adatszerkezetek, objektumok 1. el˝ oad´ as Sergy´ an Szabolcs [email protected] ´ Obudai Egyetem Neumann J´ anos Informatikai Kar 2011. szeptember 14. Sergy´ an (OE NIK) AAO 01 2011. szeptember 14. 1 / 33

Upload: others

Post on 01-Feb-2021

8 views

Category:

Documents


0 download

TRANSCRIPT

  • Algoritmusok, adatszerkezetek, objektumok1. előadás

    Sergyán [email protected]

    Óbudai EgyetemNeumann 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 kialaḱıtása, egyszerű algoritmusokmegismerése

    2 Az objektumorientált programozási paradigma alapjainak megismerése

    Sergyán (OE NIK) AAO 01 2011. szeptember 14. 2 / 33

  • Tananyag feléṕıtése

    1 Algoritmus, algoritmus léırási módjai

    2 Strukturált programozás, vezérlési szerkezetek

    3 Programozási tételek4 Objektum orientált programozás

    1 Osztály, objektum2 Mező, metódus3 Konstruktor, destruktor4 Egységbezárás, láthatóság5 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

  • Vizsgajegy

    Alá́ırás birtokában lehet vizsgára jelentkezni

    Ponthatárok

    Teljeśıtmény % Érdemjegy88–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’sszótárban.

    Az algorism szó volt a szótárban, melynek jelentése: aritmetikaieljárások elvégzése arab számokkal.

    Az első algoritmus, amivel találkozhatunk, az Euklideszi algoritmusvolt.

    Mai defićıció

    Jól meghatározott száḿı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éautomata1 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 aḿı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 motor1 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 nincsmegfelelő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, amelym-nek és n-nek is osztója.Algoritmus

    1 Osszuk el m-et n-nel és legyen r azosztási maradék.

    2 Ha r = 0, akkor véget ér és n akimenet.

    3 Egyébként m = n és n = r .

    4 Ugrás az 1. lépésre.

    m n r120 48 24

    48 24 0

    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 azalgoritmusnak.

    Meghatározottság: Az algoritmus minden egyes lépését mindenlehetséges esetre prećı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, amelyekmeghatározott viszonyban vannak az algoritmus bemeneteivel.

    Hatékonyság: Egy száḿıtógép által végrehajtott algoritmustól elvárt,hogy gyorsabban működjön mintha száḿıtógép nélkül hajtottuk volnavégre.

    Sergyán (OE NIK) AAO 01 2011. szeptember 14. 11 / 33

  • Algoritmus léı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, nr := m mod nCiklus aḿıg r 6= 0

    m := nn := rr := m mod n

    Ciklus végeKi: 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 utaśı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:

    S1S2

    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 akkorS1

    különbenS2

    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örivé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, ennekmegfelelően a pszeudokódban is többfélét használunk.

    Elöltesztelős ciklus

    Ciklus aḿıg LS

    Ciklus vége

    Hátultesztelős ciklus

    CiklusS

    Ciklus aḿıg L

    Számlálós ciklus

    Ciklus i = i0-tól i1-igS(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 csaka megengedett elemi programokat tartalmazzák a megengedettprogramkonstrukciók (vezérlési szerkezetek) alkalmazásával.

    Elemi programok

    üres programértékeadás (állapot változtatás)

    Megengedett konstrukciók

    szekvenciaelágazásciklus

    Bizonýıtható, hogy a fenti szabályok megtartásával mindenalgoritmussal megoldható feladatra adható megoldás.

    Sergyán (OE NIK) AAO 01 2011. szeptember 14. 23 / 33

  • Moduláris programozás

    Az elkésźıtendő programot egyetlen utaśıtással szeretnénk megoldani.

    Ha ez nem sikerül, akkor több utaśıtással próbálkozunk, melyek egyesrészfeladatokat valóśıtanak meg.

    Addig folytatjuk ezt a részfeladatokra bontást, ḿıg mindenrészfeladatot sikerül megvalóśıtani elemi utaśıtások felhasználásával.

    Összefoglalva: A teljes feladatot részekre bontjuk, majd ezeket avisszavezeté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óśıtása

    A moduláris programozást pl. függvények (illetve eljárások) h́ıvásávaltudjuk megvalóśı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óśıtásához változókra van szükségünk(ld. Euklideszi algoritmus)

    Az egyes változóknak az algoritmusok száḿıtógépesimplementációjánál t́ıpust kell megfeleltetni.

    Sok esetben az alkalmazott változó t́ıpustól függ, hogy milyenalgoritmussal 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/ćı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 elemiműveletet (értékadás, összehasonĺıtás, beolvasás, kiiratás, stb.) kellvégrehajtani adott bemenet mellett.

    Egy algoritmus futási ideje függ az algoritmust megvalóśıtóprogramtól, a programozási nyelvtől, a száḿı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 x0 pozit́ıv valós számok, hogyminden x > x0 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átfolyamatábrával, struktogrammal és pszeudokóddal.

    2 Adott két śıkbeli pont: P1(x1, y1) és P2(x2, y2). Keressük a P1-en ésP2-n áthaladó egyenesen az x0 abszisszájú pont y0 koordinátáját.Adjon algoritmust a feladat megoldására.

    3 Késźıtsen algoritmust, mely eldönti, hogy egy adott év szőkőév-e vagysem.

    4 Késźıtsen algoritmust, mely megadja, hogy egy adott év adotthónapja hány napból áll.

    5 Késźıtsen algoritmust, amely egy pozit́ıv egész számról eldönti, hogypŕım-e vagy sem.

    6 Késźıtsen algoritmust, amely bekéri egy tankör zh eredményeit, majdkiszáḿıtja azok átlagát.

    Sergyán (OE NIK) AAO 01 2011. szeptember 14. 33 / 33