pragma ada_2012; with ada.integer_text_io; use ada.integer_text_io; with ada.text_io; use ada.text_io; procedure two_dim_array is type My_Array_t is array(Natural range <>, Natural range <>) of Natural; type My_Array1_t is array(Natural range <>) of Natural; type My_Array2_t is array(Natural range <>) of My_Array1_t(1 .. 5); a0: My_Array_t(1 .. 3, 1 .. 4) := ( 1..3 => (1 .. 4 => 0) ); a1: My_Array_t(1 .. 3, 1 .. 4) := ( others => (others => 0) ); a2: My_Array_t := ((11, 12, 13), (21, 22, 23)); b1: My_Array2_t(1 .. 3); begin for i in a1'range(1) loop for j in a1'range(2) loop a1(i, j) := i*j; end loop; end loop; for a of a2 loop put(a); end loop; for i in b1'range loop for j in b1(i)'range loop b1(i)(j) := i*j; end loop; end loop; end two_dim_array;