private void HandleSubMenu(int index, Automaat <int> automaat) { switch (index) { case 0: automaat.ViewImage(); break; case 1: NdfatoDfa.MakeDfa(automaat).ViewImage(); break; case 2: automaat.MinimizeHopCroft(false).ViewImage(); break; case 3: automaat.GeefTaal(5).ForEach(s => Console.WriteLine(s)); Console.ReadLine(); break; case 4: automaat.GeefNietTaal(5).ForEach(s => Console.WriteLine(s)); Console.ReadLine(); break; } }
static void PracL1Representatie2() { char[] alphabet = { 'a', 'b' }; Automaat <string> m = new Automaat <string>(alphabet); m.AddTransition(new Transition <string>("1", alphabet[0], "2")); m.AddTransition(new Transition <string>("1", alphabet[1], "3")); m.AddTransition(new Transition <string>("2", alphabet[0], "1")); m.AddTransition(new Transition <string>("2", alphabet[1], "5")); m.AddTransition(new Transition <string>("3", alphabet[0], "2")); m.AddTransition(new Transition <string>("3", alphabet[1], "4")); m.AddTransition(new Transition <string>("4", alphabet[0], "2")); m.AddTransition(new Transition <string>("4", alphabet[1], "4")); m.AddTransition(new Transition <string>("5", alphabet[0], "1")); m.AddTransition(new Transition <string>("5", alphabet[1], "4")); // only on start state in a dfa: m.DefineAsStartState("1"); // two final states: m.DefineAsFinalState("2"); m.DefineAsFinalState("4"); m.DefineAsFinalState("5"); List <Tuple <string, bool> > testWords = new List <Tuple <string, bool> >(); testWords.Add(new Tuple <string, bool>("a", true)); testWords.Add(new Tuple <string, bool>("bb", true)); testWords.Add(new Tuple <string, bool>("abb", true)); testWords.Add(new Tuple <string, bool>("aabb", true)); testWords.Add(new Tuple <string, bool>("baa", false)); testWords.Add(new Tuple <string, bool>("aabbabaaabab", true)); testWords.Add(new Tuple <string, bool>("ababaabaa", false)); testWords.Add(new Tuple <string, bool>("abba", true)); testWords.Add(new Tuple <string, bool>("babab", false)); testWords.Add(new Tuple <string, bool>("ababa", true)); TestingAutomaat("Bevat een even aantal b’s of bevat een oneven aantal a’s", m, testWords); var a = m.GeefTaal(3); Console.WriteLine("geaccepteerde woorden:"); a.ForEach(word => Console.WriteLine("\t" + word)); var b = m.GeefNietTaal(3); Console.WriteLine("niew geaccepteerde woorden:"); b.ForEach(word => Console.WriteLine("\t" + word)); }
static void TestSamenvoegen() { char[] alphabet = { 'a', 'b' }; var dfa1 = new Automaat <int>(alphabet); dfa1.AddTransition(new Transition <int>(1, alphabet[0], 2)); dfa1.AddTransition(new Transition <int>(1, alphabet[1], 1)); dfa1.AddTransition(new Transition <int>(2, alphabet[0], 1)); dfa1.AddTransition(new Transition <int>(2, alphabet[1], 2)); dfa1.DefineAsStartState(1); dfa1.DefineAsFinalState(1); var dfa2 = new Automaat <int>(alphabet); dfa2.AddTransition(new Transition <int>(1, alphabet[0], 1)); dfa2.AddTransition(new Transition <int>(1, alphabet[1], 2)); dfa2.AddTransition(new Transition <int>(2, alphabet[0], 1)); dfa2.AddTransition(new Transition <int>(2, alphabet[1], 3)); dfa2.AddTransition(new Transition <int>(3, alphabet[0], 1)); dfa2.AddTransition(new Transition <int>(3, alphabet[1], 4)); dfa2.AddTransition(new Transition <int>(4, alphabet[0], 4)); dfa2.AddTransition(new Transition <int>(4, alphabet[1], 4)); dfa2.DefineAsStartState(1); dfa2.DefineAsFinalState(1); dfa2.DefineAsFinalState(2); var notDfa1 = !dfa1; var notDfa2 = !dfa2; var and = dfa1 & dfa2; var or = dfa1 | dfa2; Graphviz.PrintGraph(and, "and"); var testWords = new List <Tuple <string, bool> >(); dfa1.GeefTaal(4).ForEach(s => testWords.Add(new Tuple <string, bool>(s, true))); dfa2.GeefTaal(4).ForEach(s => testWords.Add(new Tuple <string, bool>(s, true))); TestingAutomaat("And dfa", and, testWords); TestingAutomaat("Or dfa", or, testWords); }