Minden számítógépes feladatmegoldásnak alfája az, hogy tisztázzuk: miből lehet kiindulni, mit kell kiszámolni, milyen eredményhez kell eljutni. Vagyis a majdani program bemenő és kimenő adatairól kell pontos képet kialakítani. Ehhez először is megismerkednünk az adatok jellegzetességeivel. Az alábbi hétköznapi példa középpontjába egy adatmetafora, a szódás szifon áll.
A feladat nagyon egyszerű: készítsünk szódavizet! Kezdjük azzal, hogy meggondoljuk, milyen kellékek szükségesek hozzá! Tehát szükséges:
A szódavíz-készítés nagyvonalú algoritmusa mindenki számára valahogy a következőképpen néz ki:
Szódavíz-készítés:
Csavard szét a szifont!
Öntsd bele a vizet!
Csavard össze a szifont!
Csavard rá a teli patront!
Vége.
Annyi máris látszik, hogy kellékeink bizonyos szempontból alapvetően különböznek: a víz, a patron, amolyan hozzáadandó (bemeneti kellékek), amíg a szifon adottság (hisz ha ő nincs, az alapprobléma eleve föl sem merül). Sőt van olyan valami, ami az eljárás során keletkezik, ez a szódavíz (kimeneti kellék). A szódavízkészítés szempontjából a be- és a kimeneti valamik – összefüggve egymással – változnak, így ők változó objektumok, amíg a szifon bizonyos alkatrészei állandóknak tekinthetők.
A kellékeink sokfélesége más nézőpontokból is vizsgálható, és jól mintázza az absztrakt adatok jellemzőit is. Például a szerkezetükre koncentrálva: amíg a víz, a patron egyszerűek (mondhatni: elemiek), addig a szifon bonyolult, szerkezettel rendelkező (úgymond: összetett valami). Újabb nézőpontból: a kellékek bizonyos vonása szempontjából a vízmegléte, vagy a patron milyensége kérdésesnek tekinthető, a szifon részeinek meglétét eleve feltesszük (minthogy ennek megsértésétől tartani annyi lenne, mint attól félni, hogy valaki kávéfőzővel akarna szódavizet készíteni).
Most már – hihetnénk – továbbléphetünk, s foglakozhatunk az algoritmus mélyebb régióinak felvázolásával is. De mégsem. Ahhoz, hogy megfogalmazhassuk, e kellékekből milyen módon készül a szódavíz: pontosítani kell a tárgyiasult részleteket, a kellékek szerkezetét, s csak ezt követően térhetünk rá az egyes részeken operáló utasítások (Csavard szét..., Öntsd bele... stb.) megtervezésére.
A kellékek részletezése (gyakran a részletezése helyett finomítása szót használnak):
E hosszadalmas szöveges leírást az alábbi tömörebb, s az egymásba illeszkedést is jól kifejező formalizmussal ismételjük meg. (Az a nem titkolt szándék van e mögött, hogy az adatok leírására is valamilyen rövidebb, egyértelműbb nyelvezet felé induljunk el.)
Patron [∈{üres, CO2}]
Szifon = Test = Tartály = H2O
CO2
Cső
Fej = Szelep
Patronrész = Kosár
Patron [∈{üres, CO2}].
A kellékek finomítása után már magától értetődő az eljárásunk finomítása. Ez természetesen még mindig fog tartalmazni nem definiált részletű makrótevékenységeket, melyeknek csak a célja világos (a neve utal rá, és – esetleg – a szögletes zárójelek közé szúrt megjegyzések):
Szódavíz-készítés:
HA szifon üres AKKOR
Csavard le a testről a fejet! [test:=szifon-fej]
Vedd ki a csövet! [tartály:=test-cső]
Csavard le a szelepről a patronrészt![szelep:=fej-patronrész]
Vedd ki a patronrészből a patront! [kosár:=patronrész-patron]
Szifontestet öntsd tele vízzel! [Tartály:=víz]
Tedd bele a csövet! [test:=tartály+cső]
Csavard rá a testre a fejet! [szifon:=test+fej]
Végy patront! [=CO2]
Cseréld ki a patronokat! [CO2↔üres]
Csavard rá a szelepre a patronrészt! [patron-rész:=kosár+patron]
[Tartály:=Tartály+CO2]
Vége.
Néhány probléma fölmerül a fenti algoritmussal kapcsolatosan, amelyek fölött nem szabad elsiklanunk. Ezek a meggondolni valók:
Szódavíz-készítés:
Végy patront! [CO2]
HA szifon üres ÉS patron teli AKKOR
Csavard le a testről a fejet!
Vedd ki a csövet!
Csavard le a szelepről a patronrészt!
Vedd ki a patronrészből a patront!
Szifontestet öntsd tele vízzel!
Tedd bele a csövet!
Csavard rá a testre a fejet, hogy a szifon teljes legyen!
Cseréld ki a patronokat!
Csavard rá a szelepre a patronrészt, hogy a fej teljes legyen!
Vége.
Megérett a helyzet arra, hogy megfogalmazzunk – az eddigi tapasztalatainkra építve – négy kulcsfontosságú programozási fogalmat: a konstans, a változó, az értékadás és a típus fogalmát. A szifon állapotán az eljárásunk folyamán változás történik. (Hisz ennek érdekében dolgozunk rajta.) Üresből szódavízzel telivé lesz. Eközben bizonyos részei (a tartályban a cső, a szelep a fejen) megmaradtak ugyanabban a minőségben, amiben kezdetben voltak. (Nagy bajt jelentene, ha nem így lenne!) És mindazt, amit leírtunk alkalmazhatjuk a világ összes szódás szifonjára, vagyis nagyképűbben mondva: a szódás szifonok kategóriájára.
Konstans: az az adat, amely a műveletvégzés során nem változtat(hat)ja meg értékét, mindvégig ugyanabban az állapotban marad.
Változó: az ilyen adatféleségnek lényegéhez tartozik a változékonyság, más szóval: vonatkozhatnak rá olyan műveletek is, amelyek új értékkel látják el. Tudományosabban fogalmazva nem egyelemű az állapothalmaza; a változó mindig az állapothalmazbeli valamelyik állapotban van (éppen ez a változó értéke).
Értékadás: az az utasítás, ami révén a pillanatnyi állapotból egy (másik) meghatározottba kerül át a változó. (Nyilvánvaló, hogy konstans adatra nem vonatkozhat értékadás, az egy, kezdőértéket meghatározón kívül.)
Típus: olyan megállapodás (absztrakt kategória), amely adatok egy lehetséges körét jelöli ki az által, hogy rögzíti azok állapothalmazát és az elvégezhető műveletek arzenálját.
Vizsgáljuk meg e szempontból a szifont! Lehetséges állapotkomponensei:
Érdemes e vizsgálatot egy egyszerű típusú adatra, mondjuk a patronra is elvégezni:
(A két szempontot eggyé is tehetjük – mint, ahogy tettük is –, ha az állapothalmazt az üres, a CO2, és a más értékhármassal definiáljuk.)
Nincs más hátra, mint a fent megfogalmazott résztevékenységeket továbbiakra (esetleg már elemiekre) bontani! (Figyeljük a szifonkomponens- és eljárás-finomításban a haladás párhuzamosságát! Kissé formálisabban – egy-egy értékadással – igyekszünk megmutatni a tevékenységek által elvégzett transzformációt.)
Csavard le a testről a fejet:
test:=szifon-fej
Vége.
Csavard le a szelepről a patronrészt:
szelep:=fej-patronrész
Vége.
Vedd ki a csövet:
tartály:=test-cső
Vége.
Vedd ki a patronrészből a patront:
kosár:=patronrész-patron
Vége.
Szifontestet öntsd tele vízzel:
ISMÉTELD, AMÍG nincs tele: Önts bele vizet!
Vége.
De lehet másként is, ha van egy segédkellék: a decis pohár.
Szifontestet öntsd tele vízzel:
CSINÁLD 10-szer: Önts a pohárba vizet!
Öntsd bele a pohár vizet!
Vége.
Célszerű egységesíteni az algoritmikus szókincset! Ismételd..., illetve Csináld... közül válasszuk ki az egyiket, és a továbbiakban csak azt használjuk erre a célra! A következő, 4. példában véglegesítjük a nyelvünk szókincsét.
Tedd bele a csövet:
test:=tartály+cső
Vége.
Csavard rá a testre a fejet, hogy a szifon teljes legyen:
szifon:=test+fej
Vége.
Cseréld ki a patronokat:
Végy ki a patronos dobozból egy CO2 patront!
Tedd a helyére az üres patront
patronrész:=kosár+CO2 patron
Vége.
Csavard rá a szelepre a patronrészt, hogy a fej teljes legyen:
fej:=szelep+patronrész
Vége.
Értelmesen lehetne rövidíteni az algoritmust, ha észrevesszük, hogy a két Csavard rá ... eljárás csak a kellékekben tér el. Ha e konkrét kellékhármas (mit, mire, mivé) helyett csak jelölnénk a szerepüket és e jelekkel fogalmaznánk meg a tevékenységet, akkor elegendő lenne csak egyszer lerögzíteni a csavarás hogyanját! E szerepjátszásra fölbérelt adatszimbólumokat formális paramétereknek hívják. Ott, ahol viszont a konkrét adatokra alkalmazzuk, abban a leírásban aktuális paraméterként fejezi ki, hogy vele történik mind az, ami az eljárásban zajlik.
Csavard rá az A-ra a B-t, hogy C teljes legyen:
C:=A+B
Vége.
![]() ![]() |
![]() |
![]() |
A tananyag az ELTESCORM keretrendszerrel készült