http://www.adaconcept.com/programs/tipusok_es_altipusok.adb
--Rotter Gyorgy
--Nehany egyszeru pelda (eszkoz) a tipusok es attributumok hasznalatara

with Ada.Text_IO;

procedure tipusok_es_altipusok is
   ------------------------------[alap tipuskonstrukcio]-----------------------
   type SajatDiszkretTipus is (Egy, Ketto, Harom);         --diszkret (felsorolasi) (a rendezest a tipusertekek kozott a felsorolas sorrendje hatarozza meg!)
   type Sebesseg is new integer;                           --diszkret (egesz) tipus definialas szarmaztatassal (ez egy uj tipus, igy majd ha integer-kent szeretnenk hasznalni konvertalnunk kell (explicit))


   --------------------------------[tipuskonstrukciok]-------------------------
   type SajatModuloTipus is mod 7;                         --modulo 7 tipus (tipusertekek 0-6-ig) a rajta ertelmezett muveletek modulo szamolnak!
   type Valos is digits 8;                                 --digits utan a mantissza abrazolasahoz szukseges decimalis jegyek szama


   subtype IntegerAltipus is integer range 1..255;         --itt nem kell explicit konverzio
   subtype MasikNev is integer;                            --mivel altipus itt sincsen szukseg explicit tipus konverziora, igy tulajdonkeppen atneveztuk az integer tipust masra


   ---------------------------------[valtozok]---------------------------------
   egeszszam:integer:=0;                                   --kezdeti ertekadas (elhagyhato, de ha nem irjuk ki a valtozo memoriaszemetet tartalmazhat)
   megszoritottegeszszam:IntegerAltipus;
   aktualissebesseg:Sebesseg;
begin
   Ada.Text_IO.Put_Line("Program indul");                  --kiiras a kepernyore

   --explicit tipuskonverzio--
   aktualissebesseg:=50;
   egeszszam:=integer(aktualissebesseg);                   --integer-re alakitas

   Egeszszam:=25;
   aktualissebesseg:=Sebesseg(egeszszam);                  --sebesseg-ge alakitas   (tehat a sajat tipusainkat ugyanugy hasznalhatjuk, mint a beepitetteket)

   --explicit tipuskonverzio vege--

   megszoritottegeszszam:=5;
   megszoritottegeszszam:=megszoritottegeszszam;           --itt nem kell a konverzio, mert altipusrol van szo, ha a tipus invarians serul kivetel keletkezik


   Ada.Text_IO.Put_Line("Eddig kellett a kodot nezni nagyon :)");
   declare                                                 --declare blokk (igy deklaralhatunk a torzson belul valtozokat pl. olyat, ami fugg valamilyen futas ideju ertektol) vagy a lathatosagot/elettartamot is csokkenthetjuk vele
      szam:integer;
      szamot_tartalmazo_szoveg:string(1..2);               --string=karaktertomb!!! (karakterekbol allo (indefinit) tombtipus)
      diszkret:SajatDiszkretTipus;
   begin

      Ada.Text_IO.Put_Line("szamok 1-tol 10-ig:");
      for I in 1..10 loop
        Ada.Text_IO.Put(integer'image(i));                 --konvertalas (integer-bol string-ge) minden mas (egyszeru) tipusra ugyanigy
      end loop;
      Ada.Text_IO.New_Line;                                --sortores

      szamot_tartalmazo_szoveg:="12";
      szam:=integer'value(szamot_tartalmazo_szoveg);       --konvertalas (string-bol integer-re) minden mas (egyszeru) tipusra ugyanigy

      diszkret:=Egy;                                       --ugyanaz mintha ezt irtuk volna: diszkret:=SajatDiszkretTipus'First;  (hasonloan van 'Last is) FIGYELEM! az EGY nem string!

      Ada.Text_IO.Put(SajatDiszkretTipus'image(diszkret)); --"EGY"
      Ada.Text_IO.Put_Line( natural'Image( SajatDiszkretTipus'Pos(EGY) ) );  --tipusertek poziciojanak lekerese a tipusertekek kozott (a parja a 'Val ami megmondja, hogy a valahanyadik pozicion melyik ertek all)

      diszkret:=SajatDiszkretTipus'Succ(diszkret);                           --a (tipus)ertek novelese eggyel (hasonloan van 'Pred is)
      Ada.Text_IO.Put(SajatDiszkretTipus'image(diszkret)); --"KETTO"
      Ada.Text_IO.Put_Line( natural'Image( SajatDiszkretTipus'Pos(diszkret) ) );


   end;


   Ada.Text_IO.Put_Line("Program vege");
end tipusok_es_altipusok;