1 / 66

Algoritmusok és készítésük

Algoritmusok és készítésük. Algoritmus fogalma. Az algoritmus szó Muhammad Ibn Músza Al-Hvázimi (IX. század) csillagász és matematikus nevéből származik A hindu számokról írt jelentős munkájának pontatlan latinra fordításakor változott a szerző neve Algoritmusra

harley
Download Presentation

Algoritmusok és készítésük

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Algoritmusok és készítésük

  2. Algoritmus fogalma • Az algoritmus szó Muhammad Ibn Músza Al-Hvázimi (IX. század) csillagász és matematikus nevéből származik • A hindu számokról írt jelentős munkájának pontatlan latinra fordításakor változott a szerző neve Algoritmusra • Az algoritmus egy probléma véges számú elemi lépésben történő egyértelmű és teljes megadása.

  3. A problémamegoldás lépései • A feladat megfogalmazása • A feladat leírása legyen mindig pontos és egyértelmű. • Ezt elhanyagolva sok idő és pénz veszhet kárba. • Elemzés, tervezés, szervezés • Számos módszertant, szoftvert fejlesztettek ki erre a célra. • Ezek tartalmazzák a probléma megoldását támogató és leíró matematikai modelleket, valamint a be- és kimenő adatokkal szembeni igényeket

  4. A problémamegoldás lépései (folyt.) • Programtervezés, algoritmuskészítés • Ebben a szakaszban kell megtervezni és dokumentálni a különböző modelleket megvalósító algoritmusokat. • Az algoritmus nem egyenlő a programmal, ugyanis még általános, programnyelv-független • A programterv kidolgozása többlépcsős, egyre finomabb részletezettségű

  5. A problémamegoldás lépései (folyt.) • Programozás, kódolás • Az algoritmusok kódolása konkrét programozási nyelvre • Ebben az esetben a számítógép számára értelmezhető, futtatható programokról van szó • A program tesztelése, hangolása • A tesztelés bonyolult, aprólékos munka, megfelelő időt kell rá fordítani (hibák kiküszöbölése, finomhangolás)

  6. A problémamegoldás lépései (folyt.) • Dokumentálás • Az egész folyamatot végigkíséri, de ebben a fázisban kell a felhasználók és üzemeltetők számára leírni a rendszer használatát • Ez a leírás tartalmazza a rendszer működési feltételeit, paramétereit, valamint az adminisztrátori és felhasználói kézikönyveket • A rendszer bevezetése, üzemszerű használata • A megtervezett, elkészített, letesztelt és dokumentált rendszer használatának megkezdése, folyamatos ellenőrzés mellett • A bevezetés után megfogalmazódó igények alapján további verziók készíthetők

  7. Algoritmus-leíró eszközök • Ezekkel az eszközökkel jeleníthetőek meg az algoritmusok: • Folyamatábra (blokkdiagram) • Mondatszerű leírás (leírónyelv) • Struktogram • Jackson módszer • Mindegyik leíró eszköznek megvannak a maga külön jelölési módszerei

  8. Folyamatábra (blokkdiagram) • A folyamatábra az algoritmus képi reprezentációja • A mindennapi életben is találkozhatunk algoritmusokkal (bank- vagy italautomata) • A szimbólumok különbözőek, de mindegyikre igaz, hogy elemi vagy összetett lépések végrehajtási sorrendjét adják meg

  9. Folyamatábra jelölései START STOP be: vált1, vált2 ki: kif1, kif2 változó:=kifejezés

  10. Folyamatábra jelölései (folyt.) feltétel részalgoritmus beállít, vizsgál, léptet

  11. Folyamatábra jelölései (folyt.) Folyamatvonal: a végrehajtás irányát, a lépések egymásutániságát mutatja. Csak a döntési és a ciklikus végrehaj-tás szimbólumában ágazhat el.

  12. Adatok, adattípusok, változók

  13. Változó • A változó egy névvel ellátott tárolóhely a számítógép memóriájában • értéke mindig a tárolóhely aktuális tartalma • A változókat jellemezhetjük a • nevével • típusával • memóriabeli kezdőcímével • értékével

  14. Név • A változó neve az azonosításra szolgál • ezzel tudunk a változóra hivatkozni, pl.: valamilyen képletben • célszerű a változónak beszédes nevet adni (a nevéből rá lehessen jönni, mi a tartalma) • mivel általában többször használjuk egy programban, így a hossza is fontos • programnyelvfüggőek a névre vonatkozó szabályok (hány karakter, milyen karakterek, kis- és nagybetű számít-e)

  15. Típus • Nagyon fontos tulajdonsága egy változónak a típus, hiszen meghatározza: • a változó értékkészletét • a változóval elvégezhető műveletek körét • a helyfoglalás nagyságát a memóriában • A típusok konkrét megvalósítása az adott programnyelvtől függ, de általánosan elmondható, hogy 2 nagy csoportra oszthatóak: • elemi típusok • összetett típusok

  16. Elemi típusok • Az elemi típusoknak nincs szerkezetük, nem lehet egyes részeiket külön kezelni • Egész szám: egész számok tárolására, melyek lehetnek előjelesek vagy előjel nélküliek; többféle létezik belőle • Valós számok: véges tizedes törtek ábrázolására, a számokat normál alakban tárolják; többféle létezik belőle • Karakter: egyetlen karakter tárolására

  17. Elemi típusok (folyt.) • Logikai: kétféle értéket vehet fel (igaz, hamis) • Mutató: a változó értéke egy memóriacím, amivel gyakorlatilag „rámutatunk” az adott memóriabeli helyre (dinamikus memóriakezelés megvalósításához szükséges)

  18. Összetett típusok • Elemi vagy összetett típusokat tartalmaznak valamilyen szerkezeti összefüggés szerint (adatszerkezeteknek is nevezzük őket) • tömb: homogén adatszerkezet, azaz több azonos típusú elemet tartalmaz • Jellemzői: név, típus, indexhatár • A típus azt adja meg, hogy a tömbben szereplő elemek milyen típusúak • Az indexhatár a tömb elemszámát határozza meg, azaz a tömb méretét (a memóriabeli mérete függ a típustól is) • A tömb elemeire a tömb nevével, és mögötte szögletes zárójelben az indexszámmal hivatkozunk. • Lehet egydimenziós (vektor) és többdimenziós is. A kétdimenziós tömböt mártixnak hívjuk.

  19. Összetett típusok (folyt.) • Karakterlánc (string, szöveg): egy karakter típusú egydimenziós tömbnek fogható fel kezelés szempontjából • meghatározhatjuk a nevét és a méretét • a string egyes elemeire a nevével és az adott karakter indexszámával (szögletes zárójelben) hivatkozhatunk • Rekord: heterogén adatszerkezet, melynek valamennyi komponensére és magára a rekordra is külön névvel hivatkozunk • különböző típusú adatokat lehet benne tárolni • a komponenseket mezőknek hívjuk • állománykezelésnél, ill. adatbázis-kezelésnél használják

  20. Összetett típusok (folyt.) • Állomány (fájl): típusai: • szöveges állomány • típusos állomány • nem típusos állomány

  21. Érték • A legtöbb programozási nyelvben a változót deklarálni kell • azaz, mielőtt használnánk, meg kell adni a nevét és a típusát (ezt általában a program vagy algoritmus elején található deklarációs részben lehet megtenni) • A változó deklarálásakor a változó típusának megfelelő hely lefoglalódik a memóriában • A deklarálás pillanatában a változó értékét definiálatlannak nevezzük • Ekkor is lehet értéke, a memóriában lefoglalt hely korábbi tartalmától függően • mivel ezt a korábbi értéket biztosan nem akarjuk használni, a változónak érdemes kezdőértéket adni

  22. Kifejezés • Kifejezés lehet: • egy konkrét érték (pl.: 10, hamis, „A”) • egy változó (pl.: a, x, min, nev) • változók vagy konkrét értékek és műveleti jelek kombinációja (pl.: 2*x, 3+2, N<=5) • A műveleti jeleket operátoroknak, a változókat és konkrét értékeket operandusoknak hívjuk • A kifejezéseket kiértékelve konkrét értéket kapunk (aminek lesz valamilyen típusa) • a kifejezés típusa a kifejezésben szereplő operandusok és operátorok típusától függ

  23. Konstans • Lényege: egy konkrét értéket valamilyen beszédes névvel látunk el, hogy a későbbiekben a névvel tudjunk rá hivatkozni (pl.: pi) • Előnye: az algoritmust átláthatóbbá teszi • A konstansokat a program vagy algoritmus elején kell megadni, és csak itt kap értéket • Ha az alapértékét meg szeretnénk változtatni, azt elég egyszer megtenni az algoritmus folyamán

  24. Vezérlési szerkezetek • A folyamatábrák segítségével csak egyszerűbb algoritmusok írhatóak le • Komolyabb algoritmusok készítéséhez vezették be a vezérlési szerkezeteket • Az 1960-as években bebizonyították, hogy minden algoritmus leírható 3 vezérlési szerkezettel: • szekvenciával • szelekcióval • iterációval

  25. Vezérlési szerkezetek (folyt.) • Szekvencia: • utasítások egymás utáni végrehajtása • külön nem jelöljük • Szelekció (elágazás): • egy feltétel kiértékelésének eredményétől függ, hogy milyen utasítások kerülnek végrehajtásra • Iteráció (ciklus, ismétlés): • egy utasítás egymás után többszöri végrehajtása esetén használjuk

  26. Vezérlési szerkezetek (folyt.) • Ezek a vezérlési szerkezetek leírhatóak folyamatábrával, de mivel egymásba ágyazhatóak, egy bizonyos szint után a folyamatábra áttekinthetetlenné és túl bonyolulttá válik.

  27. Mondatszerű leírás (leírónyelv) • Ez az algoritmusleíró eszköz a magyar nyelvre épül, így könnyebben tanulható és átlátható. • A sok különböző programozási nyelv eszköztáraiból csak a legfontosabbakat tartalmazza • A mondatszerű leírással megírt algoritmus nem más, mint utasítások sorozata • Létezik hozzá szabálygyűjtemény, ezt szintaxisnak nevezzük.

  28. Leírónyelv - változódeklarálás • Az algoritmus kezdésének jelölése után következik • az algoritmus kezdése leírónyelvben: algoritmus név • változódeklarálás:váltózó váltnév1, váltnév2, … : típus • akkor írhatjuk a változóneveket egy sorba, ha azok azonos típusúak • különböző típusú változóknál annyi sor lesz, ahány különböző típust akarunk használni

  29. Leírónyelv – változódeklarálás (folyt.) • Példák változódeklarálásra: változó darab:egész változó átlag:valós változó l:logikai változó vezetéknév, keresztnév: szöveg • Konkrét programozási nyelvek esetén figyelni kell a névadásra, mert léteznek olyan nyelvek, ahol a kis- és nagybetű különbözőnek számít (pl.: Java)

  30. Leírónyelv - értékadás • Értékadás: változónév:=kifejezés • A := jel jobb oldalán lévő kifejezést kiszámítja, és az eredményt eltárolja a bal oldalon található változóban • Ez csak akkor lehetséges, ha a kifejezés eredményének és a változónak a típusa megegyezik • Pl.: átlag:=összeg/db l:=(darab<=10) vezetéknév:="Horváth"

  31. Leírónyelv – értékadás (folyt.) • Az első példánál látható, hogy az osztásra a / jel szolgál. • Ha elosztjuk az összeget a darabszámmal, akkor megkapjuk az átlagot • Fontos, hogy az átlag nevű változó valós típusú legyen, mivel egy osztás eredménye általában nem egész szám

  32. Leírónyelv – értékadás (folyt.) • A második példát úgy kell értelmezni, hogy ha a darab nevű változó aktuális értéke kisebb, mint 10, akkor az l nevű logikai típusú változó értéke igaz lesz, ellenkező esetben hamis • A harmadik sorban szöveges értéket adtunk egy változónak. • fontos, hogy ekkor a szöveget "" jelek közé kell tenni, különben a szöveget változónévként próbálja értelmezni a program, és ez hibához vezethet

  33. Leírónyelv – Beolvasás, kiíratás • Beolvasás be: vált1, vált2… • Kiíratás ki: kif1, kif2… • A be utasítás a felhasználótól kapott értékeket eltárolja az adott nevű változókba • A ki utasítás pedig kiírja a képernyőre a megadott kifejezést, vagy a változók értékét

  34. Leírónyelv – Beolvasás, kiíratás (folyt.) • Példa (név beolvasása, majd üdvözlés kiíratása): algoritmus üdv változó név:szöveg ki: "Írj be egy nevet!" be: név ki: "Üdvözöllek", név algoritmus vége

  35. Leírónyelv – Beolvasás, kiíratás (folyt.) • Példa (név beolvasása, majd üdvözlés kiíratása) magyarázata: • Először változót deklarálunk: létrehozzuk a név nevű változót, ami szöveg típusú lesz • Majd kiíratjuk a képernyőre, hogy mit csináljon a felhasználó (írja be a nevet) • Bekérésnél a felhasználó által beírt nevet eltároljuk a név nevű változóban • Végül kiírjuk az üdvözlő szöveget, majd mellé a nevet, amit a felhasználó megadott, és a név nevű változóban található

  36. Leírónyelv – Szelekció • Szelekciónál egy feltételtől függően hajtunk végre bizonyos utasításokat • 3 fajtája van: • egyágú elágazás • kétágú elágazás • többágú elágazás

  37. Leírónyelv – Szelekció (folyt) • Egyágú elágazás: ha feltétel akkor utasítás(ok) hvége • Ha az adott feltétel igaz, akkor az utasítás(ok) végrehajtódnak

  38. Egyágú szelekció folyamatábrával h i feltétel utasítás(ok)

  39. Leírónyelv – Szelekció (folyt) • Kétágú elágazás: ha feltétel akkor utasítás(ok) különben utasítás(ok) hvége • Ha az adott feltétel igaz, akkor az adott utasítás(ok) hajtódnak végre, ha hamis, akkor a különben részbe írt utasítás(ok) hajtódnak végre

  40. Kétágú szelekció folyamatábrával h i feltétel utasítás(ok) utasítás(ok)

  41. Leírónyelv – Szelekció (folyt) • Többágú elágazás: elágazás amikor feltétel1: utasítás(ok) amikor feltétel2: utasítás(ok) … különben utasítás(ok) evége

  42. Leírónyelv – Szelekció (folyt) • Többágú elágazás: • A többágú elágazásnak legalább egy amikor ágat kell tartalmaznia, a különben ág elhagyható • Ha valamelyik feltétel teljesül, akkor a hozzá tartozó utasítások hajtódnak végre • Ha egyik feltétel sem teljesül, akkor a különben ágba írt utasítások hajtódnak végre (ha van különben ág)

  43. Többágú szelekció folyamatábrával h i feltétel h i utasítás(ok) feltétel utasítás(ok) utasítás(ok)

  44. Leírónyelv – Szelekció (folyt) • Példa kétágú elágazásra (két szám összehasonlítása): algoritmus nagyobb változó a,b:egész be: a,b ha a>b akkor ki: "A nagyobb mint B" különben ki: "A nem nagyobb mint B" algoritmus vége

  45. A példa folyamatábrával START be: a, b h i a>b ki: "A nagyobb mint B" ki: "A nem nagyobb mint B" STOP

  46. Leírónyelv – Szelekció (folyt) • Példa többágú elágazásra (két szám összehasonlítása): algoritmus nagyobb változó a,b:egész be: a,b elágazás amikor a>b: ki: "A nagyobb mint B" amikor a<b: ki: "B nagyobb mint A" különben ki: "A két szám egyenlő" evége algoritmus vége

  47. A példa folyamatábrával START be: a, b h i a>b ki: "A nagyobb mint B" h i a<b ki: "A kisebb mint B" ki: "A két szám egyenlő" STOP

  48. Leírónyelv – iteráció • Az iteráció esetében olyan utasításokról van szó, amiket többször ismételünk meg egymás után • Alapvetően 3 fajta iterációt (ciklust) különböztetünk meg: • növekményes (léptetős) ciklus • elöltesztelő ciklus • hátultesztelő ciklus

  49. Leírónyelv – iteráció (folyt.) • Növekményes (léptetős) ciklus • Akkor használjuk, ha pontosan tudjuk, hogy hányszor kell ismételni az adott utasításokat • Szükség van a ciklusban egy ún. ciklusváltozóra, amivel számon tarthatjuk, hogy hányadik ismétlésnél tartunk ciklus cv:=ké..vé lépésköz=lk ismétel utasítás(ok) cvége ciklusmag

  50. Leírónyelv – iteráció (folyt.) cv: ciklusváltozó ké: kezdőérték vé: végérték lk: lépésköz (a ciklusváltozót mekkora lépésekkel változtassuk – egyesével, kettesével,… stb.) ciklusmag: az ciklus azon része, amely az ismétlendő utasításokat tartalmazza

More Related