Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Informatika oktatása / Programozási modellek /1.3. Hogyan készül a szódavíz?

Programozási modellek

1. Hétköznapi algoritmusok

1.3. Hogyan készül a szódavíz?

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.

Megjegyzés

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.

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.

A tananyag az ELTESCORM keretrendszerrel készült