with Ada.Text_IO; use Ada.Text_IO;
with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Text_IO.Unbounded_IO; use Ada.Text_IO.Unbounded_IO;
procedure Aufg_2_3_i_c is
-- Die Eingabevariable.
Dat_Wort : Unbounded_String;
-- L_1 = {a^nb^m|n,m in N_0 mit n >= 0, m >= 3}
-- Ueberrueft, ob das Wort in L_1 enthalten ist.
function Check_L1 (Wort : String)
return Boolean is
A, B : Natural := 0;
begin
for i in Wort'First .. Wort'Length loop
-- ein "a" darf nich' hinter 'nem 'b' vorkommen
if (i + 1 <= Wort'Length) then
if (Wort (i) = 'b') and (Wort (i + 1) = 'a') then
return False;
end if;
end if;
if (Wort (i) /= 'a') and (Wort (i) /= 'b') then
return False;
end if;
-- zaelt "a"'s
if Wort (i) = 'a' then
A := A + 1;
end if;
-- zaelt "b"'s
if Wort (i) = 'b' then
B := B + 1;
end if;
end loop;
-- prueft, ob das Wort so viele "a"'s und "b"s' wie in der
-- Mengencharakterisierung angegeben.
if (B >= 3) then
return True;
end if;
return False;
end Check_L1;
-- L_2 = {a^nb^m|n,m in N_0 mit n >= 2, m >= 0}
-- Ueberrueft, ob das Wort in L_2 enthalten ist.
function Check_L2 (Wort : String)
return Boolean is
A, B : Natural := 0;
begin
for i in Wort'First .. Wort'Length loop
-- ein "a" darf nich' hinter 'nem 'b' vorkommen
if (i + 1 <= Wort'Length) then
if (Wort (i) = 'b') and (Wort (i + 1) = 'a') then
return False;
end if;
end if;
if (Wort (i) /= 'a') and (Wort (i) /= 'b') then
return False;
end if;
-- zaelt "a"'s
if Wort (i) = 'a' then
A := A + 1;
end if;
-- zaelt "b"'s
if Wort (i) = 'b' then
B := B + 1;
end if;
end loop;
-- prueft, ob das Wort so viele "a"'s und "b"s' wie in der
-- Mengencharakterisierung angegeben.
if (A >= 2) then
return True;
end if;
return False;
end Check_L2;
begin
-- Zeigt dem user die sprachen, fragt von ihm das Wort ab und ueberrueft,
-- ob es in L1 und/oder L1 enthalten ist und gibt das Ergebnis aus.
New_Line;
Put_Line ("L_1 = {a^nb^m|n,m in N_0 mit n >= 0, m >= 3}");
Put_Line ("L_2 = {a^nb^m|n,m in N_0 mit n >= 2, m >= 0}");
New_Line;
Put_Line ("Bitte geben Sie das Wort ein und das Programm prueft, ob es" &
" in L1 oder in L2 enthalten ist.");
New_Line;
Get_Line (Dat_Wort);
New_Line;
if Check_L1 (To_String (Dat_Wort)) then
Put_Line ("Das Wort ist in L1 enthalten.");
end if;
if Check_L2 (To_String (Dat_Wort)) then
Put_Line ("Das Wort ist in L2 enthalten.");
end if;
if not Check_L1 (To_String (Dat_Wort)) and
not Check_L2 (To_String (Dat_Wort)) then
Put_Line ("Das Wort ist weder in L1 noch in L2 enhalten.");
end if;
end Aufg_2_3_i_c;