Lottószám sorsolás
Eljött az idő, hogy további részekre bontsuk a programunkat, és megismerkedjünk az Ada programozási nyelv egy fontos fogalmával a csomaggal. (A csomag lehetővé teszi, hogy egységbe zárjunk típusokat, adatokat/változókat és más programegységeket.) A program amit bemutatunk egy sorsoló gép megvalósítása lesz, amely során számos új nyelvi lehetőséggel is megismerkedünk. A feladat a követhető: Adott egy gép amely kétféle sorsolási módot, a kézit és a gépit különbözteti meg. Hogy melyiket választjuk, azt a billentyűzet segítségével adhatjuk majd meg. (Valójában mindkét esetben véletlenszám generálás fog majd történni, melynek hatására 5 különböző számfeliratot tartalmazó golyót kapunk majd. Ez az algoritmus különböző véletlenszámok generálásánál nagyon jellemző.)
Elmondható, hogy program érdekessége a megvalósításban rejlik. Itt most nem is írunk róla többet. A bőségesen kommentezett programot az alábbi linkeken lehet megtekinteni.
A könnyebb érthetőség kedvéért egy külön programban ismertetjük a véletlenszám generáláshoz szükséges legfontosabb tudnivalókat.
veletlenszamgeneralas.adb
A program:
sorsologep.ads
sorsologep.adb
sorsologep_teszt.adb
magyarázat:
A csomag kívülről is elérhető részébe teszünk néhány típust és az eljárásokat, de a golyotipus nevű diszkriminánsos rekord megvalósítását elrejtjük a csomagot használó programegység elől. Mindössze a típus létezését mutatjuk a használó programegység felé. A golyókat egy tömbben tároljuk, és a tömb segítségével hivatkozunk rájuk. Ez egy fontos döntés, amely meghatározza kódunk kinézetét. A cél az, hogy a különböző golyókra kényelmesen tudjunk hivatkozni. Ez a megoldás csak a tömbök használatának lehetőségeit árnyalja, mint megoldás nem szerencsés, hiszen az, hogy az 1-es „rekeszben” az 1-es, a 2-esben a 2-es golyót tároljuk redundancia, amely egy komolyabb program esetén inkonzisztenciához vezethet, azaz ha a számozás elcsúszik, az algoritmus hibásan fog működni…
A sorsologep.adb 11. sorától kezdődően egy olyan módszert ismertetünk, amely megkönnyítheti a billentyűzetről olvasást, amennyiben a beolvasandó értékeket előre ismerjük.
A nyelv nem tartalmaz hátultesztelős ciklust, ezért ezt más módon kell megvalósítanunk. Erre láthatunk gyakran használt példát a sorsologep.adb 66-70.soraiban