a)
- —
- Der Automat nimmt eine unendlich lange Folge an Eingabezeichen an, welche mit der Ausnahme von a (Absteigen) und h (Hochsteigen) in Beliebiger Reihenfolge kommen können. Wenn h oder a eingegeben werden, muss ein Stopp-Signal folgen. Das Wort kann nicht auf a oder h enden. Wenn a oder h das letzte eingegebene Zeichen war, führt die Eingabe von h bei a oder a bei h.
DrohnenAutomat.cs
namespace ForschungsdrohenAufgabe;
public static class DrohnenAutomat
{
internal delegate Transition Transition(char input);
static Transition s0 = input => input switch
{
'l' => s0,
'r' => s0,
'x' => s0,
'v' => s0,
'z' => s0,
'h' => s1,
'a' => s2,
_ => throw new Exception()
};
static Transition s1 = input => input switch
{
'h' => s1,
'l' => s1,
'r' => s1,
'v' => s1,
'z' => s1,
'x' => s0,
_ => throw new Exception()
};
static Transition s2 = input => input switch
{
'a' => s2,
'l' => s2,
'r' => s2,
'v' => s2,
'z' => s2,
'x' => s0,
_ => throw new Exception()
};
public static bool Akzeptiert(string eingabe)
{
var eingabeArray = eingabe.ToCharArray();
var queue = new Queue<char>(eingabeArray);
var state = s0;
while (queue.Count != 0)
{
var input = queue.Dequeue();
try
{
state = state(input);
}
catch (Exception)
{
return false;
}
}
return state == s0;;
}
}
Program.cs
using ForschungsdrohenAufgabe;
while (true)
{
Console.WriteLine("Bitte gieb ein Wort ein, oder nutze 'exit' zum beenden:");
var eingabe = Console.ReadLine();
if (string.IsNullOrEmpty(eingabe) || string.IsNullOrWhiteSpace(eingabe))
continue;
if (eingabe == "exit")
{
Console.WriteLine("Programm wird beendet");
break;
}
var valid = DrohnenAutomat.Akzeptiert(eingabe);
if (valid)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Die Eingabe ist gültig");
}
else
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Die Eingabe ist ungültig");
}
Console.ResetColor();
}