algoritmusok, adatszerkezetek, objektumokalgoritmusok, adatszerkezetek, objektumok 1. el}oad as...
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