2012. július 21., szombat

Számok kiírása szöveggel

Az alábbiakban egy Free Pascalban készült programot fogok bemutatni (elkészíteni), melynek segítségével számokat tudunk szöveggel kiíratni a képernyőre.
Lássunk is hozzá. Az elv az, hogy egész osztást végzünk egészen addig, míg el nem jutunk az egyesekhez.
Szükségünk lesz néhány konstansra, melyekben a számok betűvel leírt megfelelőit tároljuk. Íme:

Azt gondolom, hogy ez eléggé egyértelmű így, ezért nem magyaráznám el a konstansokat.

A következőkben készítsük el a függvényt, amely képes átalakítani a számokat betűkké. Itt szükségünk lesz 3 darab változóra, melyekben majd adatokat tárolunk. Ezek legyenek tmpstr: string=''; tmpint: integer=0; tmpszam: longint=0; Tehát van egy szöveges és két egész típust tárolni képes változónk. Mivel most függvényt írunk ezért azt is tudnunk kell, hogy a függvényünknek lesz egy bemeneti adata, amely maga a szám, amit át akarunk alakítani (legyen mondjuk szam: longint;), és a függvény azért függvény mert nevén keresztül értéked ad vissza, amely esetünkben egy string típusú adat lesz, azaz maga a szöveggé alakított szám. Nos függvényünknek adjuk mondjuk a SzambolBetu nevet.
A függvényünk fej része ezek után valahogy így alakul a változó deklarációkkal együtt:

Tehát alakul a függvényünk. Mielőtt elkezdenénk osztani a bemenetként kapott számot vizsgáljuk meg, hogy nem nulla e véletlenül. Ehhez egy sima IF feltételes utasítás elég is:

Jól látható, hogy ha nulla értéket kapunk, akkor függvényünk visszatérési értékének beállítjuk, hogy nulla, majd kilépünk a függvényből az exit eljárás meghívásával.

Most már oszthatunk. Azt azért még vegyük figyelembe, hogy a változóinknak vannak korlátai de ezeket most nem szeretnénk kihasználni. Ezért a program majd csak maximum 999 999 999 nagy számmal működik. Én azt gondolom, hogy ekkora szám bőven elég is, hiszen ha fel szeretnénk használni ezt a kódot például valami számlázó programban ott sem nagyon szokott előfordulni ettől nagyobb összeg. Ennyi kitérő után tehát osszunk. Először természetesen a tmpszam változónkba betesszük a bemenetként kapott számot azaz: tmpszam:=szam; Ezt követően  elvégzünk még egy ellenőrzést, hogy a szám, amit kaptunk nem nagyobb e mint 9 jegy. Ha nagyobb, akkor az előző IF utasításnál látható módon kilépünk a függvényből, melynek visszatérési értéke "A szám túl nagy" lesz ebben az esetben.
És most már tényleg osztani fogunk, osztásunk eredményét pedig a tmpint változóba helyezzük valahogy így: tmpint:=tmpszam div 1000000;
Hoppá! Csak egymillióval osztunk, merülhet fel a kérdés? Nos, igen. Ugyanis létre fogunk hozni egy kifejezetten a százasokat betűvé alakító függvényt is. Melyet egyben közlök majd a bejegyzés végén, minden különösebb magyarázat nélkül, minek utána lényegében ugyan azt az elvet követi, amit a SzambolBetu függvényünk is. Nem mellesleg bízom benne, hogy a kedves olvasó tudja követni a logikát, amit ebben a függvényben alkalmaztam, így annak megértése nem okoz különösebb gondot neki.

Tehát a milliós nagyságú értékek megállapításához elvégeztük az osztást. Itt be kellett vetnünk az maradékos osztást is, mivel meg kellett állapítanunk, hogy a szám nem valami kerek milliós érték e. És most akkor csavarjunk egyet a dolgon és most vizsgáljuk meg ezresekre a bemenetként kapott számunkat. Ehhez előbb el kell végezzünk egy kivonást. Vonjuk ki a tmpszam változóban tárolt számból a korábbi milliós osztás eredményt úgy, hogy ezt az eredményt a kivonás előtt felszorozzuk millióval :). A dolog valahogy így fog kinézni: tmpszam:=tmpszam-(tmpint*1000000);
Most már jöhet az ezres osztás, melyben szintén felhasználjuk a korábban emlegetett, a százasok megállapítására szolgáló függvényünket.

Láthatóan az elv itt is hasonló mint a milliós osztásnál, tehát nagyon nem ragoznám ezt sem túl. Már csak egyetlen dolog van hátra, még el kell végezzük az osztást a százasokra, tízesekre és egyesekre. Ezt a funkciót remekül elvégzi nekünk a százasok kezelésére írt függvényünk, így lényegében ezt kell meghívjuk, de előtte még el kell végezzük ezt a műveletet tmpszam:=tmpszam-(tmpint*1000); hogy az érték biztosan ne legyen nagyobb mint 999.

És ezzel lényegében eljutottunk a függvény végére. Most már csupán el kell helyezzük egy programban és ki kell próbáljuk, hogy hogy működik.Előtte azonban még álljon itt a már sokat emlegetett százasokat és ettől kisebb helyiértékeket átalakító függvény kódja is:

A programot, melyben teszteljük a függvényünket közzé teszem itt a bejegyzés végén. A teszthez használhatjuk az Ideone.com weboldalt, ahová a kódunkat a jobb oldali mezőbe bemásolva, majd a bal oldalon kiválasztva a Pascal(fpc) nyelvet (ez jelöli, hogy a Free Pascal fordítót akarjuk használni) rákattintunk a küldés gombra. Ezt követően az oldal a kódunkat lefordítja és le is futtatja. A futás végeredményéről pedig tájékoztat minket. Nos tehát következzék a teljes program:


A bejegyzés zenéje: Scooter - Remedy

Nincsenek megjegyzések:

Megjegyzés küldése