54 lines
1.6 KiB
Ada
54 lines
1.6 KiB
Ada
with Ada.Text_Io;
|
|
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
|
|
|
|
procedure Sort_Composite is
|
|
type Composite_Record is record
|
|
Name : Unbounded_String;
|
|
Value : Unbounded_String;
|
|
end record;
|
|
|
|
type Pairs_Array is array(Positive range <>) of Composite_Record;
|
|
|
|
procedure Swap(Left, Right : in out Composite_Record) is
|
|
Temp : Composite_Record := Left;
|
|
begin
|
|
Left := Right;
|
|
Right := Temp;
|
|
end Swap;
|
|
|
|
-- Sort_Names uses a bubble sort
|
|
|
|
procedure Sort_Name(Pairs : in out Pairs_Array) is
|
|
Swap_Performed : Boolean := True;
|
|
begin
|
|
while Swap_Performed loop
|
|
Swap_Performed := False;
|
|
for I in Pairs'First..(Pairs'Last - 1) loop
|
|
if Pairs(I).Name > Pairs(I + 1).Name then
|
|
Swap (Pairs(I), Pairs(I + 1));
|
|
Swap_Performed := True;
|
|
end if;
|
|
end loop;
|
|
end loop;
|
|
end Sort_Name;
|
|
|
|
procedure Print(Item : Pairs_Array) is
|
|
begin
|
|
for I in Item'range loop
|
|
Ada.Text_Io.Put_Line(To_String(Item(I).Name) & ", " &
|
|
to_String(Item(I).Value));
|
|
end loop;
|
|
end Print;
|
|
type Names is (Fred, Barney, Wilma, Betty, Pebbles);
|
|
type Values is (Home, Work, Cook, Eat, Bowl);
|
|
My_Pairs : Pairs_Array(1..5);
|
|
begin
|
|
for I in My_Pairs'range loop
|
|
My_Pairs(I).Name := To_Unbounded_String(Names'Image(Names'Val(Integer(I - 1))));
|
|
My_Pairs(I).Value := To_Unbounded_String(Values'Image(Values'Val(Integer(I - 1))));
|
|
end loop;
|
|
Print(My_Pairs);
|
|
Ada.Text_Io.Put_Line("=========================");
|
|
Sort_Name(My_Pairs);
|
|
Print(My_Pairs);
|
|
end Sort_Composite;
|