The Ada Program: tax.adb

  1 -- tax.adb:  compute income tax using arrays of rates and tax bracktes
  2 
  3 with Ada.Text_IO, Ada.Float_Text_IO;
  4 use Ada;
  5 
  6 procedure Tax is
  7 
  8    subtype NonNegFloat is Float range 0.0 .. Float'Last;
  9    type Float_Array_Type is array (1..6) of NonNegFloat;
 10 
 11    Cut_Off  : constant Float_Array_Type :=
 12      Float_Array_Type'(0.00,1500.00,3000.00,5000.00, 8_000.00,15_000.00);
 13    Base_Tax : constant Float_Array_Type :=
 14      Float_Array_Type'(0.00, 225.00, 465.00, 825.00, 1_425.00, 3_175.00);
 15    Rate     : constant Float_Array_Type :=
 16      Float_Array_Type'(0.15, 0.16, 0.18, 0.20, 0.25, 0.32);
 17 
 18    Salary, Tax : NonNegFloat;
 19    Bracket : Integer range Base_Tax'First .. Base_Tax'Last;
 20 
 21 begin
 22    while not (Text_IO.End_Of_File) loop
 23       -- get income
 24       Float_Text_IO.Get (Salary);
 25 
 26       -- find tax bracket
 27       Bracket := Cut_Off'First;
 28       while Bracket<Cut_Off'Last and then Salary>=Cut_Off(Bracket+1) loop
 29          Bracket := Bracket+1;
 30       end loop;
 31 
 32       -- compute tax
 33       Tax := Base_Tax(Bracket) + Rate(Bracket)*(Salary-Cut_Off(Bracket));
 34 
 35       -- print salary, tax rate, and tax
 36       Text_IO.Put ("salary = ");
 37       Float_Text_IO.Put (Item=>Salary, Fore=>1, Aft=>2, Exp=>0);
 38       Text_IO.Put (", tax rate = ");
 39       Float_Text_IO.Put (Item=>Rate(Bracket), Fore=>1, Aft=>2, Exp=>0);
 40       Text_IO.Put (", tax = ");
 41       Float_Text_IO.Put (Item=>Tax, Fore=>1, Aft=>2, Exp=>0);
 42       Text_IO.New_Line;
 43    end loop;
 44 end Tax;