-- Chapter 22 - Program 4 package Conveyance2 is type TRANSPORT is private; procedure Set_Values(Vehicle_In : in out TRANSPORT; Wheels_In : INTEGER; Weight_In : FLOAT); function Get_Wheels(Vehicle_In : TRANSPORT) return INTEGER; function Get_Weight(Vehicle_In : TRANSPORT) return FLOAT; type CAR is private; procedure Set_Values(Vehicle_In : in out CAR; Wheels_In : INTEGER; Weight_In : FLOAT); function Get_Wheels(Vehicle_In : CAR) return INTEGER; function Tire_Loading(Vehicle_In : CAR) return FLOAT; private -- private part of the specification type TRANSPORT is record Wheels : INTEGER; Weight : FLOAT; end record; type CAR is new TRANSPORT; end Conveyance2; package body Conveyance2 is -- Subprograms for the TRANSPORT record type. procedure Set_Values(Vehicle_In : in out TRANSPORT; Wheels_In : INTEGER; Weight_In : FLOAT) is begin Vehicle_In.Wheels := Wheels_In; Vehicle_In.Weight := Weight_In; end Set_Values; function Get_Wheels(Vehicle_In : TRANSPORT) return INTEGER is begin return Vehicle_In.Wheels; end Get_Wheels; function Get_Weight(Vehicle_In : TRANSPORT) return FLOAT is begin return Vehicle_In.Weight; end Get_Weight; -- Subprogram for the CAR record type. procedure Set_Values(Vehicle_In : in out CAR; Wheels_In : INTEGER; Weight_In : FLOAT) is begin Vehicle_In.Wheels := Wheels_In; Vehicle_In.Weight := Weight_In; end Set_Values; function Get_Wheels(Vehicle_In : CAR) return INTEGER is begin return Vehicle_In.Wheels; end Get_Wheels; function Tire_Loading(Vehicle_In : CAR) return FLOAT is begin return Vehicle_In.Weight / FLOAT(Vehicle_In.Wheels); end Tire_Loading; end Conveyance2;