40 lines
1 KiB
Ada
40 lines
1 KiB
Ada
with Ada.Containers.Vectors;
|
|
|
|
package body Moving is
|
|
use Ada.Containers;
|
|
|
|
package Number_Vectors is new Ada.Containers.Vectors
|
|
(Element_Type => Number,
|
|
Index_Type => Natural);
|
|
|
|
Current_List : Number_Vectors.Vector := Number_Vectors.Empty_Vector;
|
|
|
|
procedure Add_Number (N : Number) is
|
|
begin
|
|
if Natural (Current_List.Length) >= Max_Elements then
|
|
Current_List.Delete_First;
|
|
end if;
|
|
Current_List.Append (N);
|
|
end Add_Number;
|
|
|
|
function Get_Average return Number is
|
|
Average : Number := 0.0;
|
|
procedure Sum (Position : Number_Vectors.Cursor) is
|
|
begin
|
|
Average := Average + Number_Vectors.Element (Position);
|
|
end Sum;
|
|
begin
|
|
Current_List.Iterate (Sum'Access);
|
|
if Current_List.Length > 1 then
|
|
Average := Average / Number (Current_List.Length);
|
|
end if;
|
|
return Average;
|
|
end Get_Average;
|
|
|
|
function Moving_Average (N : Number) return Number is
|
|
begin
|
|
Add_Number (N);
|
|
return Get_Average;
|
|
end Moving_Average;
|
|
|
|
end Moving;
|