http://www.adaconcept.com/programs/gyerekcsomagos/szamrendszerek-vegyes_alapu_szamrendszer.ads
with Szamrendszerek.Szamabrazolas; -- Ada 2005 : 'private with' hasznalata eseten a specifikacio publikus reszeiben nem, de a privat reszeben mar hivatkozhatunk a private with -elt csomag publikus reszeire...
package Szamrendszerek.Vegyes_Alapu_Szamrendszer is
-- A csomag kulvilag szamara publikus reszeben nem erjuk el a privat gyerekcsomag publikus reszeit sem. (Ha igy lenne, akkor sertenenk az enkapszulacio elvet.)
-- Torekedjunk beszedes elnevezesek hasznalatara, amelyek illeszkednek a kod terminologiajahoz!
Ertekadas_Hiba : Exception;
Tulcsordult_Szam_Novelese_Hiba : Exception;
type Vegyes_Alapu_Szam_Tipus is limited private;
type Alap_Tomb_Tipus is array(Natural range <>) of Positive;
type Szamjegyek_Tomb_Tipus is array(Natural range <>) of Natural;
function Letrehoz(Alapok : Alap_Tomb_Tipus) return Vegyes_Alapu_Szam_Tipus; -- "konstruktor" parameterkent megadhatjuk "helyiertekenkent az alapokat"
procedure Letrehoz(Szam : in out Vegyes_Alapu_Szam_Tipus; Alapok : Alap_Tomb_Tipus);
procedure Beallit(Szam : in out Vegyes_Alapu_Szam_Tipus; Ertek : Szamjegyek_Tomb_Tipus);
procedure Hozzaad(Szam : in out Vegyes_Alapu_Szam_Tipus; Mennyit : Natural := 1; Hanyadik_Indexu_Helyierteken : Natural := 0); -- figyeljuk meg a parameterek sorrendjet
procedure Novel(Szam : in out Vegyes_Alapu_Szam_Tipus; Hanyadik_Indexu_Helyierteken : in out Natural; Mennyivel : Natural := 1); -- figyeljuk meg a parameterek sorrendjet
-- Lenyegeben a kovetkezot adja vissza:
-- maximum hany szamjegybol allhat a szam - 1 (figyeljuk meg, a rovid magyarazatot! (nem ismeteljuk a vegrehajtando kodot) )
function Legmagasabb_Helyiertek_Indexe(Szam : Vegyes_Alapu_Szam_Tipus) return Natural;
function Tulcsordulas(Szam : Vegyes_Alapu_Szam_Tipus) return Boolean;
-- Stringge alakitja a szamot
-- Figyelem elofordulhat, hogy egy szam valamely szamjegye tobb karakterbol all!
-- pl. 16 -os szamrendszerben a szamjegyek: (0), (1), ... ,(14), (15)
function Image(Szam : Vegyes_Alapu_Szam_Tipus) return String; -- Kivetelesen angol az elnevezes (azert, hogy kihangsulyozzuk a fuggveny szerepet)
-- Visszaadja a szam szamjegyeit egy tombben
-- a visszaadott tomb indextartomanya: 0 .. Legmagasabb_Helyiertek_Indexe(...)
function Szamjegyek(Szam : Vegyes_Alapu_Szam_Tipus) return Szamjegyek_Tomb_Tipus;
private
package Implementacios_Reszletek renames Szamrendszerek.Szamabrazolas; -- pelda atnevezesre
type Vegyes_Alapu_Szam_Tipus is record -- figyeljuk meg, hogy itt nem itruk ki a limited kulcsszot (ajanlott olvasnivalo : kiterjesztett return utasitas, hasznalata a torzsben kikommentezve!)
Abrazolas : Implementacios_Reszletek.Vegyes_Alapu_Szam_Abrazolas_Tipus;
end record;
end Szamrendszerek.Vegyes_Alapu_Szamrendszer;