public StateFunction(ITuringMachine tm, string currentState, string read, string newState, string write, string movement) { if ((read + write + movement).Trim().Length != tm.TapeAmount * 3) throw new ArgumentException("Parameter sind nicht korrekt", "read, write, movement"); CurrentState = currentState; NewState = newState; Read = read; Write = write; Movement = new List<Direction>(); for (int i = 0; i < movement.Length; i++) { Movement.Add((Direction)Enum.Parse(typeof(Direction), movement[i].ToString())); } }
public StateFunction(ITuringMachine tm, string currentState, string read, string newState, string write, string movement) { if ((read + write + movement).Trim().Length != tm.TapeAmount * 3) { throw new ArgumentException("Parameter sind nicht korrekt", "read, write, movement"); } CurrentState = currentState; NewState = newState; Read = read; Write = write; Movement = new List <Direction>(); for (int i = 0; i < movement.Length; i++) { Movement.Add((Direction)Enum.Parse(typeof(Direction), movement[i].ToString())); } }
private string init(string[] keyWords) { int dimensions = 1; int qcount = 3; int startq = 0; int timelimit = 10000; int memorylimit = 100; int memorycheckfrequency = 10; for (int i = 1; i < keyWords.Length; ++i) { switch (keyWords[i]) { case "d": case "dimensions": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра dimensions! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out dimensions) && dimensions > 0)) { return("Error: Значением параметра dimensions должно быть целое положительное число! / init\\"); } ++i; break; case "qc": case "qcount": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра qcount! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out qcount) && qcount > 0)) { return("Error: Значением параметра qcount должно быть целое положительное число! / init\\"); } ++i; break; case "sq": case "startq": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра startq! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out startq) && startq >= 0)) { return("Error: Значением параметра startq должно быть целое положительное число или 0! / init\\"); } ++i; break; case "tl": case "timelimit": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра timelimit! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out timelimit) && timelimit > 0)) { return("Error: Значением параметра timelimit должно быть целое положительное число! / init\\"); } ++i; break; case "ml": case "memorylimit": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра memorylimit! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out memorylimit) && memorylimit > 0)) { return("Error: Значением параметра memorylimit должно быть целое положительное число! / init\\"); } ++i; break; case "mcf": case "memorycheckfrequency": if (i + 1 >= keyWords.Length) { return("Error: Не указано значение параметра memorycheckfrequency! / init\\"); } if (!(int.TryParse(keyWords[i + 1], out memorycheckfrequency) && memorycheckfrequency > 0)) { return("Error: Значением параметра memorycheckfrequency должно быть целое положительное число! / init\\"); } ++i; break; } } if (startq >= qcount) { return("Error: Значение параметра startq должно быть меньше количества состояний! / init\\"); } turingMachine = new TuringMachine(dimensions, qcount, startq, timelimit, memorylimit, memorycheckfrequency); return("Инициализация прошла успешно!\\"); }
private string clear() { turingMachine = null; return("Отчистка прошла успешно!\\"); }
static int Main(string[] args) { SetWindowPos(MyConsole, 0, 0, 0, 0, 0, SWP_NOSIZE); Console.Clear(); Console.Title = appTitle; Console.SetWindowSize(Console.LargestWindowWidth - 3, Console.LargestWindowHeight); try { if (args.Length >= 1) { if (args[0] == "-diagram") { //this will launch the default browser Process p = new Process() { StartInfo = new ProcessStartInfo(new FastTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, "").DiagramUrl) }; p.Start(); return(0); } } var inp = initInput(); initMode(); Console.Clear(); Console.CursorVisible = false; switch (_stepMode) { case StepModeEnum.Slow: tm = new SlowTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp); break; default: case StepModeEnum.Normal: tm = new NormalTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp, _timeOut); break; case StepModeEnum.Fast: tm = new FastTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp); break; } tm.Print(); Console.ReadLine(); try { Console.Title = appTitle + " - running"; Stopwatch sw = new Stopwatch(); sw.Start(); while (tm.MakeStep()) { } sw.Stop(); Console.Title = appTitle; tm.Print(); if (_stepMode == StepModeEnum.Fast) { Tools.WriteTime(sw.Elapsed, tm.TapeAmount); } Tools.WriteResult(tm.TapeAmount, tm.Output.Replace("B", " ").Trim()); } catch (Exception e) { Tools.WriteError(0, 0, e); } } catch (Exception e) { Tools.WriteError(0, 0, e); } Console.ReadLine(); Console.CursorVisible = true; return(0); }
static int Main(string[] args) { SetWindowPos(MyConsole, 0, 0, 0, 0, 0, SWP_NOSIZE); Console.Clear(); Console.Title = appTitle; Console.SetWindowSize(Console.LargestWindowWidth - 3, Console.LargestWindowHeight); try { if (args.Length >= 1) { if (args[0] == "-diagram") { //this will launch the default browser Process p = new Process() { StartInfo = new ProcessStartInfo(new FastTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, "").DiagramUrl) }; p.Start(); return 0; } } var inp = initInput(); initMode(); Console.Clear(); Console.CursorVisible = false; switch (_stepMode) { case StepModeEnum.Slow: tm = new SlowTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp); break; default: case StepModeEnum.Normal: tm = new NormalTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp, _timeOut); break; case StepModeEnum.Fast: tm = new FastTuringMachine(Conf.Q, Conf.E, Conf.T, Conf.Fn, Conf.S, Conf.F, inp); break; } tm.Print(); Console.ReadLine(); try { Console.Title = appTitle + " - running"; Stopwatch sw = new Stopwatch(); sw.Start(); while (tm.MakeStep()) { } sw.Stop(); Console.Title = appTitle; tm.Print(); if (_stepMode == StepModeEnum.Fast) Tools.WriteTime(sw.Elapsed, tm.TapeAmount); Tools.WriteResult(tm.TapeAmount, tm.Output.Replace("B", " ").Trim()); } catch (Exception e) { Tools.WriteError(0, 0, e); } } catch (Exception e) { Tools.WriteError(0, 0, e); } Console.ReadLine(); Console.CursorVisible = true; return 0; }