220 likes | 371 Views
ADA Data Structures. Subtype Enumeration type. SUBTYPE. Definition : A subset of the values associated with the original type. Example : SUBTYPE Natural IS Integer RANGE 0..Integer’Last; SUBTYPE Positive IS Integer RANGE 0..Integer’Last;. More Examples.
E N D
ADAData Structures Subtype Enumeration type
SUBTYPE Definition : A subset of the values associated with the original type. Example : SUBTYPE Natural IS Integer RANGE 0..Integer’Last; SUBTYPE Positive IS Integer RANGE 0..Integer’Last;
More Examples SUBTYPE SmallInt IS Integer RANGE -50. .50; SUBTYPE NonNegFloat IS Float RANGE 0.0 . . Float’Last; SUBTYPE CapLetter IS Character RANGE ‘A’. .’Z’; X, Y, Z : SmallInt; NextChar : CapLetter; Hours_Worked : NonNegFloat;
Constraint Error SUBTYPE SmallInt IS Integer RANGE -50. .50; X, Y, Z : SmallInt; X := 26; Y := 28; Z := X + Y; Compilation Error ? At Run Time, Error will be raised. Why ?
Compatibility Rulesfor Types and Subtypes Do not allow to mix the types of operands Examples: v1 : Integer; V2 : Float; V1+V2 leads to compilation error
More Compatibility Example : SUBTYPE SmallInt IS Integer RANGE -50. .50; V1 : Integer; V2 : SmallInt; V1 + V2 is Compatible.
More Compatibility Two values are compatible if they have the same type name or one value’s type is a subtype of the other value’s type.
Interesting Things X : Integer; Y : Natural; Think about X := Y; and Y := X;
No Compilation Error X := Y; is always valid. But Y := X; is not always valid at execution time. When ?
Ada Standard Library With Ada.Numerics; Example get the value of Pi as Ada.Numerics.Pi do not need to declare Pi as constant float ...
Enumeration Type • Defined by a list of values taking the form of identifiers. • Useful in representing a fixed set of values that are not numerical such as days of the week, class year (freshman, sophomore, junior, senior) , etc...
Defining Enumeration Type Form TYPE enumeration-type ( identifier-list)
Examples TYPE Days IS (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Declaration Some_Day : Days; Today : Days; Valentine_Day : Days;
More Examples Assignment Statements Today := Friday; Some_Day := Monday;
Type Attributes and Operations Six important Attributes • First • Last • Pos - - position for a given value • Val - - value for a given position • Pred - - predecessor of a given value • Succ - - successor of a given value
Attribute Query Type’attribute-name Type’attribute-name(value) Example Days’First Days’Succ(Friday) Days’Pos(Sunday)
Input/Output for Enumeration Types • Within Ada.Text_IO, a generic package called “Enumeration_IO” must be used. • But it can not be used immediately. • Instances must be created
Format PACKAGE instance IS NEW Ada.Text_IO.Enumeration_IO (Enum => type);
Get Examples PACKAGE Day_IO IS NEW Ada.Text_IO.Enumeration ( Enum => Dats ); Day_IO.Get ( Item => Some_day); Day_IO.Get ( Item => Valentine_Day);
Put Examples Day_IO.Put ( Item => Some_Day, width => 5, Set => Lower_case);
Example Program with Enumeration Type with Ada.Text_IO; Procedure Colors Is Type English_Colors Is (white, black, red); Type French_Colors is (blanc, noir, rouge); Package Eng_Color_IO is New Ada.Text_IO.Enumeration_IO (Enum => English_Colors); Package Fr_Color_IO is New Ada.Text_IO.Enumeration_IO (Enum => French_Colors);
Eng_Color : English_Colors; Fr_Color : French_Colors; position : Natural; Begin -- Ada.Text_IO.Put (Item =>" The first English color is "); Eng_Color_IO.Put(Item=>English_Colors'First); Ada.Text_IO.New_Line; Ada.Text_IO.Put (Item => " Enter an English color : "); Eng_Color_IO.Get(Item => Eng_Color); position := English_Colors'Pos(Eng_Color); Fr_Color := French_Colors'Val(position); Ada.Text_IO.Put (Item => " The equavilent French Color is "); Fr_Color_IO.Put (Item => Fr_Color, Set =>Ada.Text_IO.Lower_Case); Ada.Text_IO.New_Line; end Colors;