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;