http://www.adaconcept.com/programs/osszetett_tipusok.adb
--Rotter Gyorgy
--Nehagy tomb es rekord tipus bemutatasa. A kesobbi programok soran ezeket az ismereteket meg bovitjuk. Ezek csak az alapok.

with Ada.Text_IO;


procedure osszetett_tipusok is
  ------------------------------[alap tipuskonstrukcio]-----------------------

  type DefinitTombTipus is array(1..10) of integer;                                      -- 1-tol 10-ig indexelt egeszeket tartalmazo tomb tipus (definit, mert ismerjuk az indexhatart (es azt a tipust is, amit tartalaz))

  type IndefinitTombTipus is array(integer range <>) of integer;                         -- indefinit, mert nem ismerjuk a pontos indexhatarokat, csak azt, hogy egeszekkel van indexelve, a pontos hatarokat deklaralaskor kell megadni!

  type KetDimenziosTombTipus is array(integer range <>) of IndefinitTombTipus(1..7);     --(olyan indefinit tombtipus, melynek minden eleme 7-elemu tomb)

  type MatrixTipus is array(integer range <>,integer range <>) of integer;


                 --A rekordok a nyelv kiemelkedoen fontos tipusai!

   --ket egesz tipusu valtozot tartalmazo rekord tipus
   --A rekordok hasznalatat kesobb reszletezzuk.
  type KoordinataTipus is record
                          x:integer;
                          y:integer;
                          end record;

  type DiszkriminansosRekord(meret:natural) is record
                                               ertekek:IndefinitTombTipus(1..meret);
                                               mutato:natural:=0;
                                               end record;

   ---------------------------------[valtozok]-------------------------------
   t:DefinitTombTipus:=(others=>7);                                                      --ertekadas minden tombelembek  (aggregatumok...)
   hetelemutomb:IndefinitTombTipus(1..7):=(1|3=>1, 2=>2, 4..5=>4, others=>7);            --ertekek:  (1,2,1,4,4,7,7)
                                                                                         --indexek:   1 2 3 4 5 6 7
   tomboktombje:KetDimenziosTombTipus(1..7):=(others=>(others=>77));
   matrix:MatrixTipus(1..7,1..7):=(4=>(others=>3), others=>(others=>7));
   pont:KoordinataTipus:=(1,2);
   -- tomb:DiszkriminansosRekord(5);                                                     --deklaracio
   szam:integer;
begin
   Ada.Text_IO.Put_Line("Program indul");

   for i in matrix'range(1) loop                                                         --matrix'range(1) = matrix'range = matrix'first..matrix'last
     for j in matrix'first(2)..matrix'last(2) loop
       Ada.Text_IO.put(integer'Image( matrix(i,j) ));                                    --figyeljuk meg az indexelest!
     end loop;
     Ada.Text_IO.new_line;
   end loop;

   szam:=matrix(3,4);                                                                    --figyeljuk meg az indexelest!
   szam:=tomboktombje(3)(4);                                                             --figyeljuk meg az indexelest! a tomboktombje(3) az egy tomb

   --Megjegyzés: azonos hosszusagu tombok is ertekul adhatoak egymasnak a := -vel (gondoljunk a stringekre = karaktertomb) hasonloan a &...

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