home *** CD-ROM | disk | FTP | other *** search
- -- Chapter 21 - Program 1
-
- -- This package uses a data structure composed of three INTEGER
- -- variables. It allow the user to add two structures, component
- -- by component, or subtract component by component. Provision is
- -- also made to build a structure from three numbers, or decompose
- -- a structure into its components.
-
- package Three is
-
- type DATA_STRUCTURE is
- record
- Value1 : INTEGER;
- Value2 : INTEGER;
- Value3 : INTEGER;
- end record;
-
- function "+"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE;
- function "-"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE;
- function Build_Structure(Val1, Val2, Val3 : INTEGER) return
- DATA_STRUCTURE;
- procedure Decompose(Data1 : DATA_STRUCTURE;
- Val1, Val2, Val3 : out INTEGER);
- end Three;
-
-
-
- package body Three is
-
- function "+"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Data1.Value1 + Data2.Value1;
- Temp.Value2 := Data1.Value2 + Data2.Value2;
- Temp.Value3 := Data1.Value3 + Data2.Value3;
- return Temp;
- end "+";
-
-
- function "-"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Data1.Value1 - Data2.Value1;
- Temp.Value2 := Data1.Value2 - Data2.Value2;
- Temp.Value3 := Data1.Value3 - Data2.Value3;
- return Temp;
- end "-";
-
-
- function Build_Structure(Val1, Val2, Val3 : INTEGER) return
- DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Val1;
- Temp.Value2 := Val2;
- Temp.Value3 := Val3;
- return Temp;
- end Build_Structure;
-
-
- procedure Decompose(Data1 : DATA_STRUCTURE;
- Val1, Val2, Val3 : out INTEGER) is
- begin
- Val1 := Data1.Value1;
- Val2 := Data1.Value2;
- Val3 := Data1.Value3;
- end Decompose;
-
- end Three;
-
-
-
-
- -- This program exercises the package Three as an illustration.
-
- with Text_IO; use Text_IO;
- with Three; use Three;
-
- procedure NoPrivat is
-
- My_Data, Extra_Data : DATA_STRUCTURE;
-
- begin
-
- My_Data := Build_Structure(3,7,13);
- Extra_Data := Build_Structure(-4,77,0);
- My_Data := My_Data + Extra_Data;
-
- if My_Data /= Extra_Data then
- Put_Line("The two structures are not equal.");
- end if;
-
- My_Data := Extra_Data;
-
- if My_Data = Extra_Data then
- Put_Line("The two structures are equal now.");
- end if;
-
- My_Data.Value1 := My_Data.Value1 + 13;
-
- end NoPrivat;
-
-
-
-
- -- Result of execution
-
- -- The two structures are not equal.
- -- The two structures are equal now.
-
-