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;