first commit
This commit is contained in:
48
RecurringRainfall/Ada/recurringrainfall.adb
Normal file
48
RecurringRainfall/Ada/recurringrainfall.adb
Normal file
@@ -0,0 +1,48 @@
|
||||
with Ada.Text_IO;
|
||||
with Ada.Text_IO.Unbounded_IO;
|
||||
with Ada.Strings.Unbounded;
|
||||
with Ada.Integer_Text_IO;
|
||||
with Ada.IO_Exceptions;
|
||||
|
||||
procedure RecurringRainfall is
|
||||
Current_Average : Float := 0.0;
|
||||
Current_Count : Integer := 0;
|
||||
Input_Integer : Integer;
|
||||
|
||||
-- Recursively attempt to get a new integer
|
||||
function Get_Next_Input return Integer is
|
||||
Input_Integer : Integer;
|
||||
Clear_String : Ada.Strings.Unbounded.Unbounded_String;
|
||||
begin
|
||||
Ada.Text_IO.Put("Enter rainfall int, 99999 to quit: ");
|
||||
Ada.Integer_Text_IO.Get(Input_Integer);
|
||||
return Input_Integer;
|
||||
exception
|
||||
when Ada.IO_Exceptions.Data_Error =>
|
||||
Ada.Text_IO.Put_Line("Invalid input");
|
||||
-- We need to call Get_Line to make sure we flush the kb buffer
|
||||
-- The pragma is to ignore the fact that we are not using the result
|
||||
pragma Warnings (Off, Clear_String);
|
||||
Clear_String := Ada.Text_IO.Unbounded_IO.Get_Line;
|
||||
-- Recursively call self -- it'll break when valid input is hit
|
||||
-- We disable the infinite recursion because we're intentionally
|
||||
-- doing this. It will "break" when the user inputs valid input
|
||||
-- or kills the program
|
||||
pragma Warnings (Off, "infinite recursion");
|
||||
return Get_Next_Input;
|
||||
pragma Warnings (On, "infinite recursion");
|
||||
end Get_Next_Input;
|
||||
|
||||
begin
|
||||
loop
|
||||
Input_Integer := Get_Next_Input;
|
||||
exit when Input_Integer = 99999;
|
||||
|
||||
Current_Count := Current_Count + 1;
|
||||
Current_Average := Current_Average + (Float(1) / Float(Current_Count))*Float(Input_Integer) - (Float(1) / Float(Current_Count))*Current_Average;
|
||||
|
||||
Ada.Text_IO.Put("New Average: ");
|
||||
Ada.Text_IO.Put_Line(Float'image(Current_Average));
|
||||
|
||||
end loop;
|
||||
end RecurringRainfall;
|
||||
Reference in New Issue
Block a user