/// <summary> /// Создает таблицу переходов автомата /// </summary> /// <param name="automate">Автомат</param> /// <param name="funcForNewStates">Функция, определяющая вид записи результата перехода</param> /// <param name="alphabet">Алфавит</param> /// <param name="startStates">Начальные состояния</param> /// <returns></returns> string[,] StrangeFunc(NamedAutomaton automate, Func <string, string, string> funcForNewStates, List <string> alphabet, List <string> startStates) { List <string> finalStates = new List <string>(automate.GetFinalStates()), states = new List <string>(automate.GetStates()); string[,] table = new string[states.Count + 1, alphabet.Count + 1]; string tmp; table[0, 0] = ""; for (int i = 0; i < alphabet.Count; i++) { table[0, i + 1] = alphabet[i]; } for (int i = 0; i < states.Count; i++) { table[i + 1, 0] = states[i]; } for (int i = 1; i < table.GetLength(0); i++) { for (int j = 1; j < table.GetLength(1); j++) { table[i, j] = funcForNewStates(table[i, 0], table[0, j]); } } for (int j = 1; j < table.GetLength(0); j++) { tmp = ""; if (finalStates.Contains(table[j, 0])) { tmp += " (f)"; } if (startStates.Contains(table[j, 0])) { tmp += " (s)"; } table[j, 0] += tmp; } return(table); }