Informatika ElőadásAlgoritmusok
Tusnádi István
Az algoritmus definíciója
Azon egyértelmű instrukciók halmazát, mely egy konkrét feladat véges számú lépésben történő megoldásához vezet, algoritmusnak nevezzük
Az algoritmizálhatóság feltételei
Lépésekre bontott végrehajtható folyamat Minden lépés egy elemi utasítás vagy
felbontható elemi utasításokra Meghatározott a végrehajtási sorrend Véges a leírás
Az algoritmus műveletei
szekvenciák (utasítások egymás utánisága)
iterációk más néven ciklusok (utasítások ismétlődése)
szelekciók (az algoritmus feltételtől függő elágaztatása)
Az algoritmizálás alapjai Az algoritmus lépésekből áll. Minden lépésnek egyértelműen végrehajthatónak
kell lennie. A végrehajtandó instrukcióknak valamilyen célja van. Az algoritmusnak vannak bemenő adatai melyeket
felhasznál. Az algoritmusnak legalább egy kimenő adatot
produkálnia kell. Az algoritmus véges számú lépésben
megoldhatónak kell lennie. Az algoritmus legyen hatékony és felhasználó barát
Egymás utáni utasítások
Hétköznapi életből vett algoritmus:Utcai telefonkészülék használatának algoritmusa
Emelje fel a kézibeszélőt Várja meg a tárcsahangot Ha van tárcsahang, akkor Dobjon be egy 50 Ft-ost! Tárcsázzon! Vége
Feltételtől függő elágaztatás Az előbbi példa finomítása:
Utcai telefonkészülék használatának algoritmusa
Emelje fel a kézibeszélőt Várja meg a tárcsahangot Ha nincs búgó hang, akkor
Keressen egy másik telefonkészüléket!Kezdje elölről a folyamatot
egyébkéntDobjon be egy 50 Ft-ost!Tárcsázzon!Vége
Ismételt, feltételtől függő végrehajtás
Példa egy másik algoritmusra:Szörpautomata használati algoritmusa:
Válaszd ki a megfelelő szörpöt! Dobj be egy 100 Ft-ost! Nyomd meg a kívánt szörphöz tartozó gombot! Ismételd amíg nem telik meg a pohár: Nézd a
poharat! Vedd ki a poharat! Idd meg a szörpöt! Vége
Az algoritmizálás alapjai
Az algoritmusok 3 alapvető műveletből épülnek fel: szekvenciák (utasítások egymás utánisága) iterációk más néven ciklusok (utasítások
ismétlődése)szelekciók (az algoritmus feltételtől függő
elágaztatása)
A program
Egy számítógép által érthető nyelven írt algoritmust programnak nevezünk.
Az algoritmus tervezése Meg kell fogalmazni, hogy pontosan mit kíván a
feladat, azaz milyen adat(ok)ból mi(ke)t, s milyen összefüggés alapján kell kiszámolni. Ezt a pontos, precíz megfogalmazást hívják specifikációnak.
Az algoritmus áttekinthető formában való leírására számtalan eszköz létezik: Folyamatábra Stuktogram Jackson-féle jelölés Leírás fával Leírás mondatszerű elemekkel
Algoritmus leíró eszközök Folyamatábra:
A programot gráfként írja le. A programgráf egy irányított gráf, amely a csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az induló élből bármely csomópont elérhető. A folyamatábra három féle csomópontot tartalmaz:
utasítás csomópont döntés csomópont gyűjtő csomópont.
Ez az algoritmus leíró eszköz jól használható az algoritmusok végrehajtásának követésére.
Hátrányai: terjedelmes, szövegszerkesztővel nehezen készíthető, javítása rendkívül nehézkes.
Folyamatábra
Utasítás csomópont
Döntés csomópont
Gyűjtő csomópont
Igaz Hamis
Utasítás
Folyamatábra
Igaz Hamis
Emelje fel a kézibeszélőt
Várja meg a tárcsahangot
Keressen egy másik telefonkészüléket!
Vége
Dobjon be egy 50 Ft-ost!
Tárcsázzon!
Van búgó hang?
Algoritmus leíró eszközök Stuktogram:
Az eszköz a folyamatábra hibáit próbálja meg kiküszöbölni azzal, hogy a programgráfot élek nélkül ábrázolja, így egyetlen egy alapelem marad a téglalap. Az eszköz csak struktúrált programok írására alkalmas, rajzossága miatt terjedelmes, nehezen javítható és nehezen „olvasható”.
Stuktogram
Szekvencia:Utasítás
Utasítás
FeltételNemIgen
Utasítás Utasítás
Szelekció:
Iteráció: Feltétel
Utasítás(ok)
Algoritmus leíró eszközök Jackson diagram:
Ez az eszköz az adat- és algoritmikus szerkezetek leírására egységes ábrakészletet definiál.Az új eszköz egyértelmű előnye az algoritmus- és adatleírás egységessége, áttekinthetősége azonban az eddigieknél is rosszabb.
Jackson diagramA
CB
A
CB
A
C
Szekvencia:
Szelekció:
Iteráció: F
*
F
Algoritmus leíró eszközök Leírás fával:
Ez a leíró eszköz a programgráfot és-vagy-fával írja le.
A fa ciklust nem tartalmaz, a ciklusokat rekurzívan írhatjuk le. Az eszköz az eddigieknél szélesebb alkalmazási lehetőségű, áttekinthetősége viszont továbbra is rossz.
Algoritmus leíró eszközök Leírás mondatokkal:
Sorszámozott utasítású programozási nyelvekhez (pl.: BASIC) illeszkedik ez az eszköz. Utasításai sorszámozott mondatok. Ennél az eszköznél a követést a sorszámok biztosítják. Nehezen áttekinthető, olvasható sok hátrányos tulajdonsága van.
Leírás mondatokkal
1. Emelje fel a kézibeszélőt2. Várja meg a tárcsahangot3. Ha van búgó hang, akkor folytasd az 5. soron!4. Keressen egy másik telefonkészüléket! Folytasd
a 7. soron!5. Dobjon be egy 50 Ft-ost!6. Tárcsázzon!7. Vége
Algoritmus leíró eszközök
Leírás mondat-szerű elemekkel: Elemei nem teljes mondatok, mondat szerű
elemek. Struktúrái megfelelnek a szokásos Neumann elvű programozási nyelv struktúráknak, kódolása egyszerű.
Algoritmus tervezése Az algoritmus tervezésének alapja a
dekompozíció: A feladatot részekre kell bontani, a részeket meg kell oldani, majd a megoldott részeket kell összeállítani, hogy együtt működhessenek. A részekre bontásnál két irányzatot különböztetünk meg: Felülről lefelé, fokozatosan, lépésenként finomítással.
(Top-down módszer) Alulról felfelé (bottom-up) módszer, ahol a kisebb
feladatok megoldásával kezdjük, majd azután gondolkodunk az összeállítás struktúráján.
Algoritmus tervezése A felülről lefelé való programtervezés
irányelvei: Oszd meg és uralkodj elv: a lebontott részek egymástól
függetlenek legyenek Adatok elrejtésének elve: a megfelelő program részek
csak saját adataikon dolgozzanak Döntések elhalasztásának elve: azokat a döntéseket,
melyekhez nincs elég ismeretünk halasszuk későbbre. Döntések kimondásának elve: ha már meghoztunk egy
döntést, meg kell fogalmazni, le kell rögzíteni, nehogy később erről megfeledkezve ellentmondásba keveredjünk.
Algoritmus tervezéseAz alulról felfelé tervezés
lényege:Már meglévő programrészeket építünk
programunkba. Erre akkor kerül sor, ha bizonyos részfeladatokat már megcsináltunk, vagy amikor megvásárolunk egy rutingyűjteményt.
Objektumorientált szemléletmód Az algoritmust végrehajtó programot a tervezés
során jól elkülöníthető modulokra kell bontani, A modulok külön-külön jól definiált feladatot látnak
el, így könnyen változtathatók, karbantarthatók, védettek, könnyen összeépíthetők és újrafelhasználhatók lesznek.
A megvalósításhoz a modulokon belül erős összetartás, a modulok között laza kapcsolat elvét kell követni
Modulok az objektumorientált rendszerben
Adat Eljárás
Adat
Adat
AdatAdat
Adat
Eljárás
Eljárás
Eljárás
Eljárás
Eljárás
Objektumorientált szemléletmód Egy objektumorientált programban a legkisebb
modul az objektum, melyben adatok és az eljárások össze vannak zárva.
Minden objektumnak megvan a jól meghatározott feladata.
A program működése során az objektumok egymással kommunikálva végzik a rájuk bízott feladatot
Egy objektumorientált rendszer tervezésekor a feladatspecifikáció alapján meg kell határozni a rendszerben szereplő objektumokat, és az objektumok között szét kell osztani a feladatokat.
Objektumorientált szemléletmóddal kapcsolatos fogalmak Felelősség: minden objektumnak megvan a jól
meghatározott feladata. Az objektum felelős a feladatai elvégzéséért.
Bezárás, információ elrejtése: a feladatok elvégzésének hogyanja az objektum belügye. Az objektum belseje sérthetetlen.
Polimorfizmus, többalakúság: ugyanarra a kérelemre a különböző objektumok különbözőképpen reagálnak.
Objektumorientált szemléletmóddal kapcsolatos fogalmak Osztályozás: az objektum példányokat
viselkedésük szerint osztályokba soroljuk. Öröklődés: egy osztály örökölhet
tulajdonságokat és viselkedésformákat egy másik osztálytól. Az utód osztályban csak az ős osztálytól való eltéréseket kell megadni.
Futás alatti kötés: bizonyos operációkról csak futáskor lehet kideríteni, hogy konkrétean melyikre van szükség. Ezek az operációk később kötődnek a programhoz.
Példa objektum öröklődésreEmber
NévSzületési évTanulBeszél
Oktató
TanszékFizetés
TanítBeszél
Hallgató
TanfolyamszámEredmény
Tanul
Ős osztály
Utód osztályok
Vége