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;