home *** CD-ROM | disk | FTP | other *** search
/ Chip 1995 March / CHIP3.mdf / programm / prog4 / arraygen.ada < prev    next >
Encoding:
Text File  |  1991-07-01  |  2.0 KB  |  79 lines

  1.                                     -- Chapter 28 - Program 4
  2.                    -- Constrained array generic element
  3. generic
  4.    type SUBSCRIPT is (<>);
  5.    type FLOAT_TYPE is digits <>;
  6.    type CONSTRAINED_ARRAY is array (SUBSCRIPT) of FLOAT_TYPE;
  7. procedure SumArray(Input_Array : CONSTRAINED_ARRAY;
  8.                    Sum_Of_Elements : in out FLOAT_TYPE);
  9.  
  10. procedure SumArray(Input_Array : CONSTRAINED_ARRAY;
  11.                    Sum_Of_Elements : in out FLOAT_TYPE) is
  12. begin
  13.    Sum_Of_Elements := 0.0;
  14.    for Index in Input_Array'FIRST..Input_Array'LAST loop
  15.       Sum_Of_Elements := Sum_Of_Elements + Input_Array(Index);
  16.    end loop;
  17. end SumArray;
  18.  
  19.  
  20.  
  21.                    -- Unconstrained array generic element
  22. generic
  23.    type MY_TYPE is range <>;
  24.    type MY_ARRAY is array (POSITIVE range <>) of MY_TYPE;
  25. function AddArray(Input_Array : MY_ARRAY) return MY_TYPE;
  26.  
  27. function AddArray(Input_Array : MY_ARRAY) return MY_TYPE is
  28. Sum_Of_Elements : MY_TYPE := 0;
  29. begin
  30.    for Index in Input_Array'FIRST..Input_Array'LAST loop
  31.       Sum_Of_Elements := Sum_Of_Elements + Input_Array(Index);
  32.    end loop;
  33.    return Sum_Of_Elements;
  34. end AddArray;
  35.  
  36.  
  37.  
  38.  
  39.  
  40. with Text_IO, SumArray, AddArray;
  41. use Text_IO;
  42.  
  43. procedure ArrayGen is
  44.  
  45. type LIMIT_RANGE is new INTEGER range 1..5;
  46. type MY_FLOAT is new FLOAT digits 5;
  47. type LITTLE_FLOAT is array(LIMIT_RANGE) of MY_FLOAT;
  48.  
  49. procedure Little_Sum is new
  50.                     SumArray(LIMIT_RANGE, MY_FLOAT, LITTLE_FLOAT);
  51.  
  52. Total   : MY_FLOAT;
  53. My_Data : LITTLE_FLOAT := (1.0, 2.2, 4.3, 3.1, 5.4);
  54.  
  55. type FLEX_ARRAY is array(POSITIVE range <>) of INTEGER;
  56. Big_Data  : FLEX_ARRAY(1..5) := (13, 12, 17, 33, 41);
  57. More_Data : FLEX_ARRAY(12..14) := (34, 101, 56);
  58. Result    : INTEGER;
  59.  
  60. function My_Add is new AddArray(INTEGER, FLEX_ARRAY);
  61.  
  62. begin
  63.  
  64.    Little_Sum(My_Data,Total);
  65.    Little_Sum((2.4, 1.3, 5.2, 4.7, 0.1),Total);
  66.  
  67.    Result := My_Add(Big_Data);
  68.    Result := My_Add(More_Data);
  69.  
  70. end ArrayGen;
  71.  
  72.  
  73.  
  74.  
  75. -- Result of execution
  76.  
  77. -- (No output from this program)
  78.  
  79.