Конечный автомат - C# (185583)
Формулировка задачи:
Пишу прогу конечного автомата, но возник трабл. Редко пишу код но сейчас прижало, помогите плиз.
Сложность заключается в следующем: когда перебираю все состояния и условия переходов объявляю начальное состояние "а1", но когда доходит к условию "nx3y2y3" все обрывается так как это условия перехода с "а2" к "а5". А когда объявляю каждое состояние начальным к каждому переходу то оно видит только состояние "а6"(последнее) и выкидывает с самого начало.
И еще одна проблема, не хочет переходить само в себя
ЗЫ: сори за переменные)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Stateless { enum States { a1, a2,a3, a4, a5, a6 } enum Conditions { nx1y1y2, x1y3y4, nx3y2y3, x2x3y4, y3y4,nx2y2, x2y1y4, y2, x4, nx4y1y2 /*x3nx2y1y2*/ } public class REP { private StateMachine<States, Conditions> stateMachine; public REP() { stateMachine = new StateMachine<States, Conditions>(States.a1); stateMachine.Configure(States.a1).Permit(Conditions.nx1y1y2, States.a2).Permit(Conditions.x1y3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a2); //stateMachine.Configure(States.a2).Permit(Conditions.x3nx2y1y2, States.a2); stateMachine.Configure(States.a2).Permit(Conditions.nx3y2y3, States.a5); stateMachine.Configure(States.a2).Permit(Conditions.x2x3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a3); stateMachine.Configure(States.a3).Permit(Conditions.y3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a4); stateMachine.Configure(States.a4).Permit(Conditions.nx2y2, States.a1).Permit(Conditions.x2y1y4, States.a3); //stateMachine = new StateMachine<States, Conditions>(States.a5); stateMachine.Configure(States.a5).Permit(Conditions.y2, States.a1); // = new StateMachine<States, Conditions>(States.a6); stateMachine.Configure(States.a6).Permit(Conditions.x4, States.a1).Permit(Conditions.nx4y1y2, States.a2); } public void nx1y1y2() { stateMachine.Fire(Conditions.nx1y1y2); var a = stateMachine.State; } public void x1y3y4() { stateMachine.Fire(Conditions.x1y3y4); var b = stateMachine.State; } //public void x3nx2y1y2() //{ // stateMachine.Fire(Conditions.x3nx2y1y2); // var c = stateMachine.State; //} public void nx3y2y3() { stateMachine.Fire(Conditions.nx3y2y3); var d = stateMachine.State; } public void x2x3y4() { stateMachine.Fire(Conditions.x2x3y4); var e = stateMachine.State; } public void y3y4() { stateMachine.Fire(Conditions.y3y4); var f = stateMachine.State; } public void nx2y2() { stateMachine.Fire(Conditions.nx2y2); var g = stateMachine.State; } public void x2y1y4() { stateMachine.Fire(Conditions.x2y1y4); var q = stateMachine.State; } public void y2() { stateMachine.Fire(Conditions.y2); var w = stateMachine.State; } public void x4() { stateMachine.Fire(Conditions.x4); var o = stateMachine.State; } public void nx4y1y2() { stateMachine.Fire(Conditions.nx4y1y2); var t = stateMachine.State; } static void Main(string[] args) { REP r = new REP(); r.nx1y1y2(); REP q = new REP(); q.x1y3y4(); REP w = new REP(); w.nx3y2y3(); REP e = new REP(); e.x2x3y4(); REP t = new REP(); t.y3y4(); REP y = new REP(); y.nx2y2(); REP u = new REP(); u.x2y1y4(); REP i = new REP(); i.y2(); REP o = new REP(); o.x4(); REP p = new REP(); p.nx4y1y2(); Console.ReadKey(); } } }
Решение задачи: «Конечный автомат»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Stateless { enum States { a1, a2,a3, a4, a5, a6 } enum Conditions { nx1y1y2, x1y3y4, nx3y2y3, x2x3y4, y3y4,nx2y2, x2y1y4, y2, x4, nx4y1y2 /*x3nx2y1y2*/ } public class REP { private StateMachine<States, Conditions> stateMachine; public REP() { stateMachine = new StateMachine<States, Conditions>(States.a1); stateMachine.Configure(States.a1).Permit(Conditions.nx1y1y2, States.a2).Permit(Conditions.x1y3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a2); //stateMachine.Configure(States.a2).Permit(Conditions.x3nx2y1y2, States.a2); stateMachine.Configure(States.a2).Permit(Conditions.nx3y2y3, States.a5); stateMachine.Configure(States.a2).Permit(Conditions.x2x3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a3); stateMachine.Configure(States.a3).Permit(Conditions.y3y4, States.a4); //stateMachine = new StateMachine<States, Conditions>(States.a4); stateMachine.Configure(States.a4).Permit(Conditions.nx2y2, States.a1).Permit(Conditions.x2y1y4, States.a3); //stateMachine = new StateMachine<States, Conditions>(States.a5); stateMachine.Configure(States.a5).Permit(Conditions.y2, States.a1); // = new StateMachine<States, Conditions>(States.a6); stateMachine.Configure(States.a6).Permit(Conditions.x4, States.a1).Permit(Conditions.nx4y1y2, States.a2); } public void nx1y1y2() { stateMachine.Fire(Conditions.nx1y1y2); var a = stateMachine.State; } public void x1y3y4() { stateMachine.Fire(Conditions.x1y3y4); var b = stateMachine.State; } //public void x3nx2y1y2() //{ // stateMachine.Fire(Conditions.x3nx2y1y2); // var c = stateMachine.State; //} public void nx3y2y3() { stateMachine.Fire(Conditions.nx3y2y3); var d = stateMachine.State; } public void x2x3y4() { stateMachine.Fire(Conditions.x2x3y4); var e = stateMachine.State; } public void y3y4() { stateMachine.Fire(Conditions.y3y4); var f = stateMachine.State; } public void nx2y2() { stateMachine.Fire(Conditions.nx2y2); var g = stateMachine.State; } public void x2y1y4() { stateMachine.Fire(Conditions.x2y1y4); var q = stateMachine.State; } public void y2() { stateMachine.Fire(Conditions.y2); var w = stateMachine.State; } public void x4() { stateMachine.Fire(Conditions.x4); var o = stateMachine.State; } public void nx4y1y2() { stateMachine.Fire(Conditions.nx4y1y2); var t = stateMachine.State; } static void Main(string[] args) { REP r = new REP(); r.nx1y1y2(); REP q = new REP(); q.x1y3y4(); REP w = new REP(); w.nx3y2y3(); REP e = new REP(); e.x2x3y4(); REP t = new REP(); t.y3y4(); REP y = new REP(); y.nx2y2(); REP u = new REP(); u.x2y1y4(); REP i = new REP(); i.y2(); REP o = new REP(); o.x4(); REP p = new REP(); p.nx4y1y2(); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д