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;