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.4. Jegyárusító automata

Programozási modellek

1. Hétköznapi algoritmusok

1.4. Jegyárusító automata

Következő példánkkal egy vasútállomáson használható jegyárusító automata működését írjuk le. A korábbiakban már megállapítottuk, hogy a túlságosan nagy szabadság az algoritmusírásban felesleges bonyodalmakat okoz, célszerű lenne az algoritmusok leírására használatos nyelvünket egységesíteni, rögzíteni, s a leírás mögötti tartalomban megegyezni. Ezt majd a következő fejezetekben tesszük meg, de már ebben a példában is használjuk ezen – általunk javasolt – szabványos nyelvet.

Elképzeljük a megoldást: az automatán – általános szokás szerint – látszanak azok az állomások, amelyekre jegyet képes adni. Olvasható az is, hogy mennyibe kerülnek az egyes jegyek

Kezdjük ismét a kellékekkel! Szükség lesz:

Az algoritmus legfelső szintjét nevezzük programnak. A megoldás tehát első közelítésben:

Program: [visszajáró, bedobott, állomás: nem negatív egészek

jegy : (távolság, ár), s ezek pozitív egészek ]

Várd az állomást [állomás:=állomássorszám]

Számold meg a bedobott pénzt [bedobott:=bedobott pénz]

Számold ki a visszajárót [visszajáró:=visszajáró pénz]

Ha visszajáró<0 akkor [kevés a bedobott pénz]

Add vissza a bedobott pénzt [Ki : bedobott pénz]

különben

Adj vissza [Ki : visszajáró]

Add ki a jegyet [jegy:=(távolság, ár)]

Elágazás vége

Program vége.

Elágazásoknak algoritmusleíró nyelvünkben nemcsak az elejét, hanem a végét is jelezni fogjuk, kivéve, ha e nélkül is egyértelmű. A bekezdések mindig utalnak a struktúrára, azaz utasítások együvé tartozó csoportját jelzik. Bekezdés vége a struktúra végét is jelöli.

Megjegyzés

1. A visszajáró pénzről juthat eszünkbe, hogy egységesíteni lehetne a pénz visszaadást, ha az Adj vissza tevékenység mindig a visszajáróban találja a neki megfelelő mennyiséget. Így az elágazás akkor-ága (azaz az akkor kulcs-szóval bevezetett struktúra) a következőképpen módosul:

visszajáró:=bedobott

Adj vissza [Ki: visszajáró]

2. Ennél igazibb megoldás, ha – a már korábban körvonalazott – paraméterezett eljárással oldjuk meg a visszaadást; az alábbi módon:

Adj vissza(pénz):

Ki: pénz

Eljárás vége.

Jegyezzük meg, hogy a résztevékenységeket algoritmizáló programrészeket eljárásoknak nevezzük! Az eljárás mindig azzal a névvel kezdődik, amellyel korábban hivatkoztunk rá. Vagyis erre utalunk a programunk fent tisztázott szintjén két helyen is:

Ha visszajáró<0 akkor

Add vissza a bedobott pénzt ←Adj vissza(bedobott)

különben

Adj vissza ←Adj vissza(visszajáró)

Add ki a jegyet

Elágazás vége

Folytassuk a részletezést az egyes résztevékenységekkel! A Várd az állomást-ban megjelenik a felhasználóval való kommunikáció másik utasítása (a Ki: párja), a beolvasás.

Várd az állomást: [ max : ennyi állomás van;

táblázat(max,2) : ( (1.táv, 1.ár), (2.táv, 2. ár), ... ) ]

Írj tájékoztatót [ki : állomás-táblázat]

Be: állomás [1≤állomás≤max]

Eljárás vége.

Mint minden, ami fix, rögzített, ami eleve kiírattatott az automata dobozára, úgy az algoritmusbeli táblázat is eleve megvan, s nem fog a használat által változni. Az ilyen adatféleséget korábban konstansnak neveztük. Itt persze az eddig megszokott triviális konstansoktól (5, 10, ..., 3.1415, ...) több szempontból is eltérő valamivel találkozunk. Első újdonság: általunk adott neve van (táblázat), második: bonyolult szerkezetű. Egy fontos fogalompárral érdemes megismerkednünk ezzel kapcsolatban: adataink lehetnek struktúrálatlanok (mint a max, vagy a bedobott stb.), s lehet szerkezetük (amilyen a táblázat).

A pénz számlálására alapesetben elég egy beolvasó utasítást írni.

Számláld meg a bedobott pénzt:

Be: bedobott

Eljárás vége.

Mivel az a megoldás nagyon elüt a valóságtól, ezért ezt a későbbiekben részletesebbel, egy reálisabbal helyettesítjük:

Számláld meg a bedobott pénzt:

[ pénz : pozitív egész értékű segédváltozó ]

bedobott:=0

Ciklus amíg van még pénz

Be: pénz [megengedett érme]

bedobott:=bedobott+pénz

Ciklus vége

Eljárás vége.

Hogy mi a megengedett, attól először – legalábbis a kódolásnál – célszerű eltekinteni. Kiemelendő az eljárásban a Van még pénz függvényszerű beépítése, amelynek a kérdésre adott válasz logikai értékét kell előállítania. (Ennek a tevékenységnek – ti. összegzés – visszatérő voltáról esik még szó: sorozatszámítás tétel első előbukkanásának tekinthető.)

Számold ki a visszajárót:

visszajáró:=visszajáró-táblázat(állomás,2)

Eljárás vége.

A pénz visszaadása első esetben szintén egyetlen kiírásból állhat.

Adj vissza:

Ki: visszajáró

Eljárás vége.

Ezt az eljárást átalakíthatjuk olyanná, amely megmondja, hogy melyik pénzérméből mennyit kell visszaadni.

Adj vissza:

[ db : pozitív egész

érmeszám : megengedett érmék száma

érme(érmeszám): megengedett érmék növekvő értékű sorozata]

db:=érmeszám

Ciklus amíg visszajáró>0

Ciklus amíg visszajáró<érme(db)

db:=db-1

Ciklus vége

Ki: érme(db)

visszajáró:=visszajáró-érme(db)

Ciklus vége

Eljárás vége.

A pénzvisszaadáshoz nem az egyetlen lehetséges elképzelést valósítottuk meg, hogy ti. a legkevesebb számú pénzben történjék. Ha a beolvasásnál ellenőriztük az érmék helyességét, akkor már abban az eljárásban kellett az érme vektort deklarálnunk. (És íme egy újabb visszaköszönő algoritmusfajta prototípusa: a kiválasztás tétel első előfordulása.)

Add ki a jegyet:

jegy:=táblázat(állomás,) [a táblázat egy teljes sora]

Ki: jegy

Eljárás vége.

Tanulságként hívhatjuk föl a figyelmet arra, hogy bonyolult szerkezetű adatok egészére (jegy), vagy annak még nem feltétlenül elemi részére (táblázat egy sorára) is lehet (illetve így lehet) hivatkozni.

Van még pénz:

[ van : szöveg segédváltozó ]

Be: van [van= "i" vagy "n"]

Van még pénz:=(van="i")

Függvény vége.

A függvény-eljárásnak egyetlen érdekessége van: hogyan kell a függvény értékének megadásáról gondoskodni.

Az Írj tájékoztatót eljárás tisztázását, mint algoritmikusan nem problematikust, a kódolásra hagyjuk (azaz csak a konkrét programozási nyelven megfogalmazandónak vesszük).

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