53 lines
1.7 KiB
Ada
53 lines
1.7 KiB
Ada
with Ada.Characters.Handling;
|
|
with Ada.Strings.Unbounded;
|
|
with Ada.Text_IO;
|
|
|
|
procedure The_Name_Game
|
|
is
|
|
package ACH renames Ada.Characters.Handling;
|
|
package ASU renames Ada.Strings.Unbounded;
|
|
function "+"(input : in String) return ASU.Unbounded_String renames ASU.To_Unbounded_String;
|
|
function "+"(input : in ASU.Unbounded_String) return String renames ASU.To_String;
|
|
|
|
function Normalize_Case(input : in String) return String is
|
|
begin
|
|
return ACH.To_Upper(input(input'First))
|
|
& ACH.To_Lower(input(input'First + 1 .. input'Last));
|
|
end Normalize_Case;
|
|
|
|
function Transform(input : in String; letter : in Character) return String is
|
|
begin
|
|
case input(input'First) is
|
|
when 'A' | 'E' | 'I' | 'O' | 'U' =>
|
|
return letter & ACH.To_Lower(input);
|
|
when others =>
|
|
if ACH.To_Lower(input(input'First)) = letter then
|
|
return input(input'First + 1 .. input'Last);
|
|
else
|
|
return letter & input(input'First + 1 .. input'Last);
|
|
end if;
|
|
end case;
|
|
end Transform;
|
|
|
|
procedure Lyrics(name : in String)
|
|
is
|
|
normalized : constant String := Normalize_Case(name);
|
|
begin
|
|
Ada.Text_IO.Put_Line(normalized & ", " & normalized & ", bo-" & Transform(normalized, 'b'));
|
|
Ada.Text_IO.Put_Line("Banana-fana, fo-" & Transform(normalized, 'f'));
|
|
Ada.Text_IO.Put_Line("fi-fee-mo-" & Transform(normalized, 'm'));
|
|
Ada.Text_IO.Put_Line(normalized & '!');
|
|
Ada.Text_IO.New_Line;
|
|
end Lyrics;
|
|
|
|
names : constant array(1 .. 5) of ASU.Unbounded_String :=
|
|
(+"Gary",
|
|
+"EARL",
|
|
+"billy",
|
|
+"FeLiX",
|
|
+"Mary");
|
|
begin
|
|
for name of names loop
|
|
Lyrics(+name);
|
|
end loop;
|
|
end The_Name_Game;
|