-- Chapter 30 - Program 4 -- Constrained array generic element generic type SUBSCRIPT is (<>); type FLOAT_TYPE is digits <>; type CONSTRAINED_ARRAY is array (SUBSCRIPT) of FLOAT_TYPE; procedure SumArray(Input_Array : CONSTRAINED_ARRAY; Sum_Of_Elements : in out FLOAT_TYPE); procedure SumArray(Input_Array : CONSTRAINED_ARRAY; Sum_Of_Elements : in out FLOAT_TYPE) is begin Sum_Of_Elements := 0.0; for Index in Input_Array'FIRST..Input_Array'LAST loop Sum_Of_Elements := Sum_Of_Elements + Input_Array(Index); end loop; end SumArray; -- Unconstrained array generic element generic type MY_TYPE is range <>; type MY_ARRAY is array (POSITIVE range <>) of MY_TYPE; function AddArray(Input_Array : MY_ARRAY) return MY_TYPE; function AddArray(Input_Array : MY_ARRAY) return MY_TYPE is Sum_Of_Elements : MY_TYPE := 0; begin for Index in Input_Array'FIRST..Input_Array'LAST loop Sum_Of_Elements := Sum_Of_Elements + Input_Array(Index); end loop; return Sum_Of_Elements; end AddArray; with Ada.Text_IO, SumArray, AddArray; use Ada.Text_IO; procedure ArrayGen is type LIMIT_RANGE is new INTEGER range 1..5; type MY_FLOAT is new FLOAT digits 5; type FLOAT_ARRAY is array(LIMIT_RANGE) of MY_FLOAT; procedure Little_Sum is new SumArray(LIMIT_RANGE, MY_FLOAT, FLOAT_ARRAY); Total : MY_FLOAT; My_Data : FLOAT_ARRAY := (1.0, 2.2, 4.3, 3.1, 5.4); type FLEX_ARRAY is array(POSITIVE range <>) of INTEGER; Big_Data : FLEX_ARRAY(1..5) := (13, 12, 17, 33, 41); More_Data : FLEX_ARRAY(12..14) := (34, 101, 56); Result : INTEGER; function My_Add is new AddArray(INTEGER, FLEX_ARRAY); begin Little_Sum(My_Data,Total); Little_Sum((2.4, 1.3, 5.2, 4.7, 0.1),Total); Result := My_Add(Big_Data); Result := My_Add(More_Data); end ArrayGen; -- Result of execution -- (No output from this program)