Set: Difference between revisions
Content added Content deleted
(→{{header|VBA}}: Collection as set) |
|||
Line 36: | Line 36: | ||
An alternative hash-based solution could use the Hashed_Maps package from Ada.Containers. |
An alternative hash-based solution could use the Hashed_Maps package from Ada.Containers. |
||
<lang Ada>with |
<lang Ada>with ada.containers.ordered_sets, ada.text_io; |
||
use ada.text_io; |
|||
procedure |
procedure set_demo is |
||
package cs is new ada.containers.ordered_sets (character); use cs; |
|||
function "+" (s : string) return set is |
|||
package CS is new Ada.Containers.Ordered_Sets(Character); use CS; |
|||
(if s = "" then empty_set else Union(+ s(s'first..s'last - 1), To_Set (s(s'last)))); |
|||
package IO renames Ada.Text_IO; |
|||
function "-" (s : Set) return string is |
|||
-- helper functions for string to something conversion, and vice versa |
|||
(if s = empty_set then "" else - (s - To_Set (s.last_element)) & s.last_element); |
|||
s1, s2 : set; |
|||
Result: Set; |
|||
begin |
|||
⚫ | |||
for I in S'Range loop |
|||
put ("s1= "); |
|||
begin |
|||
s1 := + get_line; |
|||
Result.Insert(S(I)); |
|||
⚫ | |||
-- raises Constraint_Error if S(I) is already in Result |
|||
put ("s2= "); |
|||
exception |
|||
s2 := + get_line; |
|||
when Constraint_Error => null; |
|||
Put_Line("Sets [" & (-s1) & "], [" & (-s2) & "] of size" |
|||
⚫ | |||
⚫ | |||
⚫ | |||
return Result; |
|||
⚫ | |||
end To_Set; |
|||
⚫ | |||
⚫ | |||
function Image(S: Set) return String is |
|||
⚫ | |||
C: Character; |
|||
& ", Equal: " & Boolean'Image(s1 = s2) & "."); |
|||
⚫ | |||
begin |
|||
end set_demo; |
|||
if T.Is_Empty then |
|||
return ""; |
|||
else |
|||
C:= T.First_Element; |
|||
T.Delete_First; |
|||
return C & Image(T); |
|||
end if; |
|||
end Image; |
|||
function Image(C: Ada.Containers.Count_Type) return String renames |
|||
Ada.Containers.Count_Type'Image; |
|||
S1, S2: Set; |
|||
begin -- main program |
|||
⚫ | |||
S1 := To_Set(Ada.Text_IO.Get_Line); |
|||
⚫ | |||
S2 := To_Set(Ada.Text_IO.Get_Line); |
|||
IO.Put_Line("Sets [" & Image(S1) & "], [" & Image(S2) & "] of size" |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
& ", Equal: " & Boolean'Image(S1 = S2) & "."); |
|||
end loop; |
|||
end Set_Demo; |
|||
</lang> |
</lang> |
||