HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Több-százjegyű egész számok összeadása és kivonása


Példaprogram letöltése

5825 bájt

A Delphi-ben használható egész számot tároló adattípusok közül az int64 képes a legnagyobb előjeles számot tárolni. Ebben a példában ezen is túllépünk, és egy olyan függvényt készítünk, amely képes akár több-százjegyű egész számok összeadására és kivonására.

Mivel a Delphi-ben nincs olyan szám típus, amely ekkora számokat tárolni tudna, ezért a számokat és az eredményt is sztringként adjuk meg. A műveletekhez szükséges függvények a LargeMath unit-ban találhatók.
ValidNumber
Osztály:
function ValidNumber(
Value: string
): string;
Ez a függvény a paraméterként megadott sztringet ellenőrzi és törli belőle a felesleges karaktereket. A kapott eredmény egy érvényes számot tartalmazó sztring lesz. Ez a szám sztring a számokon, és az opcionális „-” karakteren kívül semmilyen más karaktert nem tartalmazhat. A „-” jelzi, hogy a szám negatív, ennek kell lennie az első karakternek.
Paraméterek
Value: string
Az ellenőrizni kívánt számot tartalmazó sztring.
Visszatérési érték
A módosított sztring. Ha a paraméter sztring nem tartalmazott érvényes karaktereket, akkor a visszatérési érték „0”.
Negative
Osztály:
function Negative(
Value: string
): boolean;
Ez a függvény ellenőrzi, hogy a paraméterként megadott szám (sztring) negatív-e.
Paraméterek
Value: string
A számot tartalmazó sztring.
Visszatérési érték
Ha a sztring első karaktere „-”, akkor a visszatérési érték igaz, ellenkező esetben hamis. A függvény az ellenőrzés előtt meghívja a ValidNumber függvényt.
LargeSummary
Osztály:
function LargeSummary(
Value1,
Value2: string
): string;
Ez a függvény adja össze a két számot. Természetesen, ha pozitív számhoz negatívot adunk hozzá, akkor kivonás történik. Mivel egyszerre csak két számot összegzünk, így csak négy lehetséges eset van:
Érték1 Érték2
1. pozitív pozitív
2. pozitív negatív
3. negatív pozitív
4. negatív negatív
Azt, hogy melyik esetről van szó, egy egyszerű művelettel megtudhatjuk:
  st:=STYPE[Negative(Value1), Negative(Value2)];
Az st változó fogja tartalmazni az eset sorszámát, amit az STYPE konstans tömbből vesz. A tömb mindkét indexe logikai típusú. Miután eldöntöttük, hogy melyik esetről van szó, töröljük a negatív számok előjelét, mivel ezekre már nem lesz szükség.
Az első és az utolsó eset a legegyszerűbb, mert mindkét esetben összeadást kell végeznünk, csak az eredmény előjele változik úgy, hogy az első esetben pozitív, a másodikban pedig negatív lesz. A második és harmadik eset egy kicsit bonyolultabb. Ezeknél az eseteknél, ha az Érték2 abszolút értéke nagyobb, mint az Érték1, akkor felcseréljük a két értéket. Ha cseréltünk, akkor a ch változó értékét igazra állítjuk, ellenkező esetben pedig hamisra. Mindkét esetben kivonást fogunk végezni, a számok eredeti előjelétől függetlenül, és a végeredmény előjelét a ch változó értéke határozza meg az SSIGN konstans tömbből vett érték alapján. Ez egy kétdimenziós tömb, amelynek első indexe az eset sorszáma, a második pedig egy logikai érték, amit a ch változó értéke szolgáltat. Az 1. és 4. esetben a ch változó értéke mindig hamis, az előjel attól függ, hogy két negatív, vagy két pozitív számot adtunk-e össze. A 2. esetben az eredmény akkor lesz negatív, ha az Érték1 kisebb volt, mint az Érték2, vagyis a ch változó értéke igaz. A 3. esetben pont fordított a helyzet, ott akkor lesz negatív az eredmény, ha a két értéket nem kellett felcserélni, vagyis a ch változó értéke hamis.
Az összeadás és kivonás műveleteket ugyanúgy végezzük el, ahogyan „kézzel” is végeznénk papíron. A co változóban tároljuk a maradékot, aminek értéke max 1 lehet, hiszen csak két számot adunk össze, vagy vonunk ki egymásból.
Paraméterek
Value1: string
Az első szám sztringként megadva (Érték1).
Value2: string
A második szám szintén sztringként megadva (Érték2).
Visszatérési érték
Az összeadás eredménye.

Cikksorozat

#IDKategóriaCikk címeSorozat
1018DelphiVonalkód készítő komponens1. rész
1028DelphiVonalkód nyomtatása a QuickReport-al2. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 68. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |