03. Algoritmusok

A programozás menetének vázlata

A számítógépes programok elkészítésénél az alábbi sorrendet szokás betartani.

Egy program ötlete => Gondolatok => A program megvalósításának vázlata (algoritmus) => A program kódolása egy kiválasztott programozási nyelven => A program futtatása => Hibajavítások => Kész

Ez a vázlat persze nem minidg igaz, mert

  • néha olyan egyszerű a program, hogy nem írunk külön algoritmust,
  • a program futtaása előtt is rájöhetünk hibákra és akkor már korábban van hibajavítás,
  • a hibajavítás akár az algoritmus módosítását is jelentheti, de jelentheti a program kód módosítását is.

A programozás tanulása során azonban mindneképpen az algoritmusok megtanulásával kell kezdeni, mert

  • ekkor nem kell foglalkozni a különböző programozási nyelvek eltérő szintaktikájával (nyelvtani szabályaival),
  • a programozási nyelvek szigorú kötöttségeivel,
  • a tanuló számára megérthető, felfogható gondolatok átültetése algoritmussá egyszerűbb, mint konkrét programmá,
  • az algoritmusok nyelvfüggetlenek, tehát ekkor még nem kell dönteni a használandó programozási nyelvről.

Az algoritmus

Megengedett utasításokból, lépésekből alló sorozat, amely egy probléma, feladat megoldásához vezet. Az algoritmus egy probléma megoldásának gondolatmenete.

Mivel a számítógépes problémák gyakran annyira összetettek, hogy a programozó nem látja őket teljességgel át, ezért az algoritmusok gyakran csak a megoldás vázlatát jelentik, egyes részletkérdésekkel elnagyoltan, vagy egyáltalán nem foglalkoznak, azoknak megoldását elhalasztják.

A számítógépes algoritmusok minden esetben előre lerögzített (megengedett) utasításokból állnak. Az algoritmus a programozásban gyakran programozási nyelv független és arra szolgál, hogy a programozó képes legyen a programozási nyelvtől elvonatkoztatva gondolkozni a feladatok megoldásáról.

Az algoritmus leíró nyelvek

Az algoritmusleíró nyelvek célja az, hogy a programozási feladat megoldását jelentő algoritmust programozási nyelv független módon tudjuk leírni.

Az algoritmus leíró nyelvek tulajdonságai

  • Mindig csak néhány utasítást rögzít le előre definiált módon
  • Nem tartalmaznak programozási nyelv függő utasításokat
  • Korlátlanul bővíthető, hiszen a programozási nyelvek is bővíthetők sokféle módon
  • több féle algoritmusleíró nyelv is létezik

Folyamatábra

A folyamatábrák használatakor grafikai jelekkel jelöljük az egyes programozási egységeket. A grafikai jeleket nyilakkal kötjük össze, a program futásának megfelelő módon. Általában egy program vagy egy eljárás fentről lefelé vagy balról jobbra hajtódik végre, legalábbis a folyamatábra rajzolásánál erre kell törekedni. A szokásos feldolgozási lépéseket az alábbi módon szimbólumokkal jelöljük:

Az algoritmus kezdetét egy Start feliratú körrel ábrázoljuk.

A Program végét egy Vége vagy End feliratú körrel ábrázoljuk.

Egy tevékenységet a téglalapba beírt tevékenység nevével ábrázoljuk.

Az utasítások egymásutánját a különböző jelek közé írt vonalak és a vonalak végén lévő nyilak jelzik.

Ha egy döntést másnéven elágazást hozunk létre az algoritmusban, akkor egy rombuszba beírjuk az eldöntendő kérdést és igen / nem feliratot helyezünk a megfelelő kimenet felé.

Szokás, hogy a folyamatábra rajza a rajz tetején indul és az alján végződik.

Előnyei

  • Vizuálisan jól megjeleníthető egy algoritmus
  • Az egyszerűbb algoritmusok könnyen megérthetők.

Hátrányai

  • Nem támogat minden ismert adatszerkezetet és programozási struktúrát
  • Ciklust körülményesen lehet benne írni
  • Bonyolultabb algoritmusokat nehéz benne írni.
  • Összetettebb algoritmusok esetén a vonalak irányítása átfedheti egymást, ezért áttekinthetetlen lehet az ábrázolt algoritmus
  • Microsoft Word">Word dokumentumokban nehéz előállítani

Kezdő programozók, egyszerű feladatok megoldásához érdemes használni.

Struktogram

Az algoritmusokat téglalapokkal jelöljük. az elemi programlépés is egy téglalap.

A feltételes elágazást így jelöljük:

A ciklusokat így jelöljük

Előnyei

  • Ciklusokat is lehet benne ábrázolni
  • Rendkívül egzakt, pontos
  • Rendkívül tömör, azaz kis méretben lehet algoritmusokat leírni.
  • Egy szövegszerkesztővel is könnyen elő lehet állítani

Hátrányai

  • Nem túl áttekinthető, ezért csak a professzionális programozók használják
  • Nagyobb algoritmusok áttekinthetetlenek lehetnek

Mondatszerű leírás

A mondatszerű leírás egy elképzelt programozási nyelv, amelynek az utasításait az ananyelven kell megírni. Ilyen módon az idegen nyelv megértési nehézségeit kiküszöböljük. A mondatszerű leírásnak akkor van értelme, ha a programozó egy kicsit tisztában van egy számítógépes program működésével, érti az utasítások egymásutániságának, az értékadásnak, az elágazásoknak, a ciklusoknak a fogalmát. Érti azt, hogy mit jelent egy eljárás hívása és mit jelent egy függvény hívása. Mint látjuk majd, az algoritmus-leíró nyelv egyfajta magyar nyelvű programozási nyelv.

A leírás szabályai

A leírásban egy utasítást egy sorba írunk.

Értékadás

 i:= 10;  - A két oldalon azonos típusú értékek vannak

Feltételes elágazás   

 Ha feltétel igaz akkor Utasítás

vagy

Ha feltétel igaz akkor
   Utasítások …
 Elágazás vége

vagy

Ha feltétel igaz akkor
    Utasítások …
 Különben
    Utasítások 
Elágazás vége

Ciklusok

 Ciklus cv :=kezdőértéktől végértékig lépésközzel

   ……utasítások 
 Ciklus vége

vagy

 Ciklus amíg feltétel igaz
   .... utasítások; ……
Ciklus vége

vagy

Ciklus
      ……
amíg feltétel
Ciklus vége

Kezdőérték adás, inicializálás

Ki:        Kiíró utasítás
Be:        Adatbeviteli utasítás
Tömb:      Tömb definiálása
Inicializálás(kezdőérték)  Bizonyos adatok kezdőértékének megadása

Program struktúrák

Program Név
    ……
Program vége

Eljárás Név(paraméterlista)
    ……
Eljárás vége

Függvény Név(paraméterlista)
......
   Nev := visszatérési érték
Függvény vége

Az eljárásokat és függvényeket az alábbi módon hívhatjuk meg a programokból:

 Név( paraméterlista )

vagy

Érték := Név( paraméterlista

Az algoritmusok dokumentálása

Az algoritmus vagy feladat specifikációja

Egy program vagy algoritmus specifikációja az alábbiakat tartalmazza:

  • Milyen bemenő adatokat vár a program,
  • Milyen feltételek érvényesek a bemenő adatokra
  • Milyen kimenő adatokat várunk, és azokra milyen feltételeket várunk, azaz mikor tekintjük helyesnek és mikor hibásnak az eredményt.

Eljárások, függvények dokumentálása

Minden esetben szükséges a programban meghívott, nem triviális eljárások esetén leírni, hogy mit várunk a meghívott eljárástól. Az eljárás kifejtésekor pedig célszerű leírni az eljárás fejléceként, hogy az eljárás mit végez el, milyen típusú bemenő adatokat produkál és milyen kimenő adatokat várunk tőle.

Algoritmusok dokumentálása általában

A folyamatábrák és struktogramok használata során az algoritmusokat célszerű bő magyarázattal ellátni tekintve, hogy az előbbi két leírás meglehetősen absztrakt. Az algoritmusleíró nyelv használata során a dokumentálás hozzávetőlegesen ugyanolyan mértékű kell, hogy legyen, mint a programok írásánál. Az nem teljesen magától értetődő zárt programrészek előtt tömören le kell írni a feladataikat, esetleg annak magyarázatát, hogy miért pont úgy, azokkal az eszközökkel valósítjuk meg a folyamatot.