with Text_Io; use Text_Io; procedure pb01 is -- gcc - gnu c will not allow calc in const initializer - but OK in define FEET_PER_METER : constant := 3.28; METER_PER_FOOT : constant := (1.0 / FEET_PER_METER); FEET_PER_MILE : constant := 5280.0; METERS_PER_KILOMETER : constant := 1000.0; MILES_PER_FOOT : constant := (1.0 / FEET_PER_MILE); MILES_PER_KILOMETER : constant := (MILES_PER_FOOT * FEET_PER_METER * METERS_PER_KILOMETER) ; package Real_Io is new Float_Io(Float); use Real_Io; function cvt_feet_to_meters(Feet : float) return Float is Meters : Float; begin meters := feet * meter_per_foot; return meters; end Cvt_Feet_To_Meters; function cvt_meters_to_feet(Meters : float) return Float is Feet : float; begin feet := meters * feet_per_meter; return feet; end Cvt_Meters_To_Feet; procedure prob01 is My_Height_Meters : float; My_Height_Feet : float; begin Put_line("Problem 1"); Get(my_height_feet); -- read from stdin Put("My_Height_Feet = "); Put(My_height_feet); New_Line; my_height_meters := cvt_feet_to_meters(my_height_feet); -- convert units Put("My_Height_Meters = "); Put(My_Height_Meters); New_Line; end prob01; procedure Prob02 is Diff_Meters : float; Diff_Yards : float; begin Put_line("Problem 2"); diff_meters := 100.0 - cvt_feet_to_meters(100.0 * 3.0); diff_yards := cvt_meters_to_feet(diff_meters) / 3.0; Put_line("Problem 2"); Put("100 meters is longer by "); Put(Diff_Meters); Put(" meters "); Put(" or "); Put(diff_yards); Put(" yards "); New_Line; end Prob02; procedure Prob03 is begin Put_line("Problem 3"); Put("300 kilometers = "); Put(300.0 * miles_per_kilometer); Put_line(" miles"); end Prob03; begin Prob01; Prob02; Prob03; end pb01;