Конечный автомат - 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();
        }
 
    }
        
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5