Пример #1
0
/*
 *      public void Simuliraj()
 *      {
 *          while (postojiPrijelaz(TrenutnoStanje, Traka, Glava))
 *          {
 *              Printer.StanjeAutomata(this);
 *              foreach (FunkcijePrijelaza funkcija in TS.FunkcijePrijelaza)
 *              {
 *                  if (funkcija.TrenutnoStanje == TrenutnoStanje && funkcija.ZnakNaTraci == Traka[Glava])
 *                  {
 *                      TrenutnoStanje = funkcija.SljedeceStanje;
 *                      Traka[Glava] = funkcija.ZnakNaTraciNovi;
 *                      if (funkcija.Pomak.Smijer == "L") Glava--;
 *                      else Glava++;
 *
 *                      //ispisi prijelaz
 *                      Printer.Prijelaz(this, funkcija);
 *
 *                      break;
 *                  }
 *              }
 *              if (TS.SkupPrihvatljivihStnaja.Contains(TrenutnoStanje))
 *                  NizPrihvaca = true;
 *          }
 *          Printer.RezultatSimulacije(this, NizPrihvaca);
 *      }
 */
/*
 *      private Boolean postojiPrijelaz(Stanje TrenutnoStanje, List<ZnakTrake> Traka, int Glava)
 *      {
 *          foreach (FunkcijePrijelaza funkcije in TS.FunkcijePrijelaza)
 *          {
 *              if (funkcije.TrenutnoStanje == TrenutnoStanje && funkcije.ZnakNaTraci == Traka[Glava])
 *                  return true;
 *          }
 *          return false;
 *      }
 */
        public void Simuliraj()
        {
            FunkcijePrijelaza prijelaz;

            TrenutnoStanje = TS.PocetnoStanje;

            try
            {
                while ((prijelaz = dohvatiPrijelaz()) != null)
                {
                    TrenutnoStanje = prijelaz.SljedeceStanje;
                    Traka[Glava]   = prijelaz.ZnakNaTraciNovi;
                    Glava         += (prijelaz.Pomak == PomakGlave.Lijevo ? -1 : 1);

                    /* if (Glava < 0)
                     *   Glava = 1;
                     */
                    Printer.Prijelaz(this, prijelaz);
                }
            }
            catch (IndexOutOfRangeException)
            {
                Printer.IspisiDaSiIzasaoIzTrake();
            }

            if (TS.SkupPrihvatljivihStnaja.Contains(TrenutnoStanje))
            {
                NizPrihvaca = true;
            }

            Printer.RezultatSimulacije(this, NizPrihvaca);
        }
Пример #2
0
        private static FunkcijePrijelaza GenerirajPrijelazeZaRedak(string redak)
        {
            FunkcijePrijelaza funkcija = new FunkcijePrijelaza();

            String[] polje     = redak.Split(new String[] { "->" }, StringSplitOptions.None);
            String   lijeviDio = polje[0];
            String   desniDio  = polje[1];

            String[] dvojka = lijeviDio.Split(',');

            Stanje    trenutnoStnaje = null;
            ZnakTrake znakTrake      = null;

            foreach (Stanje st in TS.SkupStanja)
            {
                if (st.Ime == dvojka[0])
                {
                    trenutnoStnaje = st;
                }
            }

            foreach (ZnakTrake zn in TS.SkupZnakovaTrake)
            {
                if (zn.Znak == dvojka[1])
                {
                    znakTrake = zn;
                }
            }

            String[] trojka = desniDio.Split(',');

            Stanje    novoStanje    = null;
            ZnakTrake noviZnakTrake = null;


            foreach (Stanje st in TS.SkupStanja)
            {
                if (st.Ime == trojka[0])
                {
                    novoStanje = st;
                }
            }

            foreach (ZnakTrake zn in TS.SkupZnakovaTrake)
            {
                if (zn.Znak == trojka[1])
                {
                    noviZnakTrake = zn;
                }
            }

            if (trojka[2] == "L")
            {
                funkcija.Pomak = PomakGlave.Lijevo;
            }
            else
            {
                funkcija.Pomak = PomakGlave.Desno;
            }

            funkcija.TrenutnoStanje  = trenutnoStnaje;
            funkcija.ZnakNaTraci     = znakTrake;
            funkcija.SljedeceStanje  = novoStanje;
            funkcija.ZnakNaTraciNovi = noviZnakTrake;

            return(funkcija);
        }