Amikor egy problémát meg akarunk oldani, ajánlatos először a konkrét
programozási nyelvet félretenni, és azon gondolkodni, milyen lépéseket kell
megtenni a probléma megoldásának érdekében. Legjobb, ha egyszerűen
leírjuk az instrukciókat. Azon instrukciók halmazát, mely egy feladat
megoldásához vezetnek, algoritmusnak nevezzük. Algoritmusokkal a
hétköznapokban is lépten-nyomon találkozunk. Instrukciók sokféleképpen
megadhatók, például szóban, rajzban, írásban, magyar nyelven, angol
nyelven vagy programozási nyelven.
Az algoritmus tehát egy út a felvetődött probléma megoldásához. Legyen a
feladat például két darab kréta szerzése. Ahhoz, hogy elvégezzük a
feladatot, meg kell terveznünk az elvégzendő tevékenységéket. Lehet, hogy
az algoritmus néhány elemi tevékenység egymás után végrehajtandó
(szekvenciális) sorozata, mint például:
Menj be a Tanszékre!
Keresd meg az adminisztrátort!
Kérj tőle két darab krétát!
Hozd be a krétát az előadóba!
Lehet, hogy a megoldás bizonyos pontokon nem látható előre és
feltételektől függően más és más megoldást kell választanunk. Ilyen
például:
Menj be a Tanszékre!
Keresd meg az adminisztrátort!
Ha megtalálod, akkor
Kérj tőle két darab krétát!
különben
Keress máshol krétát!
Gyere vissza az előadóba!
Előfordulhat, hogy egy tevékenységet nem lehet "egyből" végrehajtani,
annak végrehajtásához további instrukciók szükségesek. Ilyenkor a
tevékenységet részletezni kell. Ilyen lehet például a "Menj be a Tanszékre"
instrukció is:
Menj ki az előadóból!
Menj el a C/1 épületbe!
Az 1. emeleten keresd meg a 104. ajtót!
Kopogtass!
Lépj be az ajtón!
Előfordulhat, hogy a megoldás érdekében valamely tevékenységet többször
is végre kell hajtani, vagyis ismételni (iterálni) kell. Lehet, hogy az iterációk
számát előre tudjuk, lehet, hogy az ismételt végrehajtásnak feltétele van. A
"Kérj tőle két darab krétát!" instrukció például két ismétlődő tevékenységből
áll:
Csináld kétszer:
Kérj tőle egy darab krétát!
Az iterációt ciklusnak is szokás nevezni. A cikluson a teljes ciklikus
folyamatot értjük, az ismétlendő tevékenység pedig a ciklus magja.
Az algoritmus struktúráját tehát szekvenciák, szelekciók illetve
iterációk adják, amelyeket tetszőleges mélységben egymásba lehet
ágyazni.
A számítógépen megoldandó feladat algoritmizálása esetén nem
elegendőek a fenti pongyola megfogalmazások. Az algoritmus leírásának
egyértelműnek, pontosnak, lépésenként végrehajthatónak kell lennie. Nem
lehetnek előre nem látott akadályok. Számítógép esetén a végrehajtónak,
vagyis a processzornak, nincsen ítélőképessége, őt nem lehet bizonytalan
helyzetek elé állítani. Mit kell csinálni a "Menj be a Tanszékre" instrukció
részletezéseként leírt szekvenciális utasítássor példájában akkor, ha nincs
nyitva a Tanszék? Ebben az esetben a "Kérj tőle két darab krétát!"
instrukció végrehajthatatlan.
Az algoritmus illetve program leglényegesebb tulajdonságait, és a vele
szemben támasztott követelményeket a következő pontokban foglalhatjuk
össze:
AZ ALGORITMUS TERVEZÉSE
Egy jó algoritmus még a legegyszerűbb program írásánál is komoly
segítséget jelenthet. Egy számítógépen megoldandó feladat felvetődése
pillanatában máris erős a csábítás, hogy az ember leüljön a számítógép elé,
és már gépeljük is az utasításokat. Miután kész vagyunk a beírással, a
fordító által jelzett hibákat több-kevesebb idő alatt kijavítjuk. Az ilyen
összedobott program azonban a legritkább esetben működik helyesen. És
akkor elkezdődik a javítgatás. A program bizonyos adatokkal működik,
másokkal nem. Ha valamit kijavítunk, helyette valami másik probléma jön
elő. Előbb-utóbb úgy összekeveredünk, hogy már azt sem tudjuk, mi is volt
a feladat tulajdonképpen. A toldozás-foltozás nem szerencsés módszer,
megbízható programot kizárólag tervszerű programozással készíthetünk!
Az algoritmus megtervezéséhez vezető első lépés a probléma körültekintő
elemzése és megfogalmazása. A megoldási módszer keresése csak akkor
kezdődhet el, ha a feladatot pontosan ismerjük. Ahhoz, hogy egyértelmű
legyen, mi is a feladat, a feladat leírását írásban rögzíteni kell! A feladat
leírását feladat specifikációnak is szokás nevezni. Az algoritmust csak a
feladat pontos megfogalmazása után próbáljuk elkészíteni, mégpedig
programnyelvtől függetlenül.
Az algoritmus tervezésének alapja a részekre bontás. Mivel - elsősorban
nagyobb lélegzetű program esetén - a feladatot egyszerre nem tudjuk
megoldani, azt kisebb részekre kell bontani. A részeket meg kell oldani,
majd a megoldott részeket össze kell állítani. A lebontás illetve összeállítás
során a következő kérdések merülnek fel: hogyan bontsuk részekre a nagy
feladatot, a részekre bontás után hogy fogjunk hozzá a megoldáshoz, végül
hogy történjen az összerakás.
Alapvetően két irányzatot különböztetünk meg:
A STRUKTURÁLT ÉS A STRUKTURÁLATLAN PROGRAM
Egy tetszőleges algoritmus a következő elemekből építhető fel:
A csak szekvenciákból, szelekciókból és iterációkból építkező programot
strukturált programnak nevezzük. A strukturált programozásban a ciklusból való
kiugrás fogalma ismeretlen. Ebből következik, hogy a program minden
szekvenciájának - és így az egész programnak is - egyetlen belépési és egyetlen
kilépési pontja van, ennélfogva a program lényegesen áttekinthetőbb.
Egy bonyolultabb algoritmust nem lehet fejben megtervezni, ahhoz
eszközök kellenek. Olyan eszközre van szükség, mely általánosan
elfogadott, és mások is ismerik, használják. Az algoritmusok áttekinthető
formában való leírására számtalan eszköz létezik. Ilyen a mondatszerű
leírás, a folyamatábra, vagy a struktogram. Ezek közül részletesebben a
folyamatábrával ismerkedünk meg.
A FOLYAMATÁBRA
A folyamatábra segítségével a program dinamikus viselkedését, folyamatát
részletekbe menően ábrázolni tudjuk. Tekintsük most át a folyamatábra
elemi jelöléseit. A program folyását nyilak mutatják, ahol történik valami,
ott valamilyen csomópont van. Tevékenységcsomóponton áthaladva a
tevékenység végrehajtódik. Döntéscsomóponthoz érkezve a Feltételtől
függően a vezérlés az Igaz vagy a Hamis (Igen vagy Nem) ágon
folytatódik. A gyűjtőcsomóponton való áthaladás mindig egyértelmű.

Bármely program e három elem segítségével felépíthető, a többi jelölés csak ábrázolási könnyebbség. Kapcsolódási pontot akkor használunk, ha helyhiány miatt ábránkat egy másik lapon folytatjuk. Az adatbevitel és az adatkiírás jelölésére is külön elemeket használunk.

Az iterációkat a következőképpen építjük fel: a vezérlés ismételten visszatér a ciklusmag elé, de az újbóli végrehatás előtt egy döntéscsomópont található, mely megengedi a ciklus elhagyását. Alapvetően két fajta iteráció létezik - az egyik a ciklusmag előtt tesztel, a másik a ciklusmag után, ezek az előltesztelő illetve hátultesztelő ciklusok.

A növekményes ciklus azt jelenti, hogy a ciklusmagban megadott
tevékenység előre meghatározott számban, valamely változó (ciklusváltozó)
növekvő értékeire hajtódik végre valamettől valameddig. Olyan iterációknál
használjuk, amelyeknél pontosan tudjuk a végrehajtások számát. A
növekményes ciklust folyamatábrán előltesztelő ciklussal tudjuk
megvalósítani úgy, hogy az ábrába beépítjük a ciklusváltozó értékének
beállítását, illetve módosításait.
Ezek után nézzük meg, hogy a folyamatábra segítségével hogyan tudjuk
leírni a krétás példánkat. Emlékeztetőül a példa: nincs krétám, hozni kellene
a Tanszékről.
Részletezve:

A STRUKTOGRAM
A struktogram egy strukturált ábrázolási módszer, megalkotója Chapin
(ezért Chapin chart-nak is hívják). E jelölés annyiban hasonlít a
folyamatábrához, hogy a tervezés itt is kívülről befelé történik. Sajnos,
ahogy a struktúrában lejjebb megyünk, úgy egyre kevesebb hely marad
tevékenységeink leírásához. Példák az alábbi ábrákon láthatók.
A MONDATSZERŰ LEÍRÁS
A mondatszerű leírás lényege, hogy a programot mondatszerű elemekből
építjük fel. Annyiban tér el a folyamatos írástól, hogy bizonyos szabályokat
be kell tartanunk, a struktúrák képzésére megállapodás szerinti formákat és
szavakat használunk. Nézzünk néhány példát:
Be- és kivitel:
Be: ...felsorolás...[megszorítások]
Ki: ...felsorolás...[kiírási formák]
Szekvencia:
Tevékenység1
Tevékenység2
Tevékenység3
Egyágú szelekció:
Ha Feltétel teljesül, akkor Tevékenység(ek) végrehajtásra kerül(nek),
egyébként nem. A program az Elágazás vége után folytatódik:
Ha Feltétel akkor
Tevékenység(ek)
Elágazás vége
Kétágú szelekció:
Ha Feltétel teljesül, akkor Tevékenység(ek)1 kerül(nek) végrehajtásra,
egyébként Tevékenység(ek)2. Mindkét esetben a program az Elágazás
vége után folytatódik:
Ha Feltétel akkor
Tevékenység(ek)1
egyébként
Tevékenység(ek)2
Elágazás vége
Egy szintet vissza, vagy
vissza a főmenübe.