/* * 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); }
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); }