-- Now give raises to employeees with ada.text_io; use ada.text_io; with ada.float_text_io; use ada.float_text_io; procedure emp4 is type Employee is record Name: String(1 .. 20); ID: String(1 .. 6); Salary: Float; end record; type Emp_Array is array(1 .. 10) of Employee; -- Array plus a count of how many currently stored type Emp_List is record emps: Emp_Array; num: Natural := 0; -- How many currently stored end record; -- Add all employees to list procedure get_emps(employs: out Emp_List) is e_tmp: Employee; begin while not end_of_file loop employs.num := employs.num + 1; get(e_tmp.Name); get(e_tmp.ID); get(e_tmp.salary); employs.emps(employs.num) := e_tmp; end loop; -- put(employs.emps(2).id); end get_emps; -- Print all the employees procedure put_emps(employs: in Emp_List) is e_tmp: Employee; begin for i in 1 .. employs.num loop e_tmp := employs.emps(i); put(e_tmp.Name); put(e_tmp.ID); put(e_tmp.salary, 7, 2, 0); new_line; end loop; end put_emps; procedure give_raises(employs: in out Emp_List; raise_amt: Float) is -- e_tmp: Employee; begin for i in 1 .. employs.num loop employs.emps(i).salary := employs.emps(i).salary + raise_amt; -- Alternate solution uses e_tmp, but -- if e_tmp is used, it must be copied BACK into the array -- e_tmp := employs.emps(i); -- e_tmp.salary := e_tmp.salary + raise_amt; -- employs.emps(i) := e_tmp; -- Copy back into array end loop; end give_raises; -- Give them all raises - version 2 using an iterator loop procedure give_raises2(employs: in out Emp_List; raise_amt: Float) is begin for e_tmp of employs.emps(1 .. employs.num) loop e_tmp.salary := e_tmp .salary+ raise_amt; end loop; end give_raises2; the_emps: Emp_List; begin get_emps(the_emps); put_emps(the_emps); new_line; give_raises(the_emps, 1_000.0); put_emps(the_emps); new_line; give_raises2(the_emps, 2_000.0); put_emps(the_emps); end emp4;