Advertisement
Soulseller

Turing-Automat

Jun 8th, 2016
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.45 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class Start {
  4.  
  5.     public static void main(String[] args)
  6.    
  7.     {  
  8.          char startzustand = '0';
  9.          ArrayList<Regeln> regeln = new ArrayList<Regeln>();
  10.          ArrayList<Character> endzustaende = new ArrayList<Character>();
  11.          String wort = "0011";
  12.          int position = 1;
  13.          ArrayList<Character> alphabet = new ArrayList<Character>();     
  14.          
  15.          alphabet.add('0');
  16.          alphabet.add('1');
  17.          
  18.          regeln.add(new Regeln('0','0','1','X','R'));
  19.          regeln.add(new Regeln('1','0','1','0','R'));
  20.          regeln.add(new Regeln('1','1','2','Y','L'));
  21.          regeln.add(new Regeln('1','Y','1','Y','R'));
  22.          regeln.add(new Regeln('2','0','4','0','L'));
  23.          regeln.add(new Regeln('2','X','3','X','R'));
  24.          regeln.add(new Regeln('2','Y','2','Y','L'));
  25.          regeln.add(new Regeln('3',' ','5',' ','N')); // - für blank
  26.          regeln.add(new Regeln('3','Y','3','Y','R'));
  27.          regeln.add(new Regeln('4','0','4','0','L'));
  28.          regeln.add(new Regeln('4','X','0','X','R'));
  29.          
  30.          endzustaende.add('5');
  31.              
  32.          Turing t = new Turing(startzustand,alphabet,regeln,endzustaende,wort,position);
  33.                          
  34.          if(t.pruefeWort())
  35.          {
  36.             System.out.println(wort+ " ist in der Sprache enthalten");
  37.          }
  38.          else
  39.          {
  40.             System.out.println(wort+ " ist in der Sprache nicht enthalten");
  41.          }
  42.          
  43.     }
  44.  
  45. }
  46.  
  47. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  48. //Nächste Klasse
  49. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  50.  
  51. import java.util.ArrayList;
  52.  
  53.  public class Turing
  54.  {
  55.  char aktZustand;
  56.  ArrayList<Regeln> regeln = new ArrayList<Regeln>();
  57.  ArrayList<Character> endzustaende = new ArrayList<Character>();
  58.  ArrayList<Character> alphabet = new ArrayList<Character>();
  59.  char[] wort;
  60.  int position;
  61.  
  62.  
  63.  public Turing (char startzustand,ArrayList<Character> alphabet,ArrayList<Regeln> regeln, ArrayList<Character> endzustaende,String wort,int position)
  64.  {
  65.      this.aktZustand = startzustand;
  66.      this.alphabet = alphabet;
  67.      this.regeln = regeln;
  68.      this.endzustaende = endzustaende;
  69.      this.wort = wort.toCharArray();
  70.      this.position = position;
  71.      
  72.  }
  73.  
  74.  
  75.  public boolean pruefeWort()
  76.  {
  77.      //Prüfe ob wort dem Alphabet entspricht
  78.      for(int i = 0; i < wort.length;i++)
  79.      {
  80.          if(!alphabet.contains(wort[i]))
  81.          {
  82.             System.out.println("Ungültiges Zeichen gefunden");
  83.             return false;
  84.          }
  85.      }
  86.      //Wort um die Leerzeichen am Ende und Anfang auffüllen
  87.      wort = (" " + String.valueOf(wort) + " ").toCharArray();
  88.  
  89.      int regelindex;
  90.      ausgabe();
  91.      
  92.      while(true)
  93.      {
  94.          regelindex = -1;
  95.          int j;
  96.          for(j =0; j < regeln.size(); j++)
  97.          {
  98.              if(regeln.get(j).match(aktZustand, wort[position]))
  99.              {
  100.                  regelindex = j;
  101.              }
  102.          }
  103.              
  104.          if(regelindex == -1)
  105.              break;
  106.          //Hohlst sich den aktuellen Zustand anhand der aktuellen Regel
  107.          aktZustand = regeln.get(regelindex).nachZustand;
  108.          //Überschreibt das Zeichen anhand der Regel
  109.          wort[position] = regeln.get(regelindex).ausgabeZeichen;
  110.          //Verschiebung der Position
  111.          if(regeln.get(regelindex).verschiebung == 'R')
  112.          {
  113.              position++;
  114.          }
  115.          else if(regeln.get(regelindex).verschiebung == 'L')
  116.          {
  117.              position--;
  118.          }
  119.          ausgabe();
  120.      }//While
  121.      
  122.      if(endzustaende.contains(aktZustand))
  123.          return true;
  124.      else
  125.          return false;
  126.  }
  127.  
  128.  private void ausgabe()
  129.  {
  130.      System.out.println("-----------");
  131.      System.out.println("Zustand: \t" + aktZustand);
  132.      System.out.println("Position: \t" + position);
  133.      System.out.print("Band: \t\t");
  134.        
  135.      for (char c: wort )
  136.      {
  137.          System.out.print(c);
  138.      }
  139.      System.out.println("\r\n");
  140.  }
  141.  
  142. }
  143.  
  144. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  145. //Nächste Klasse
  146. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  147.  
  148. public class Regeln {
  149.  
  150.  char zustand;
  151.  char zeichen;
  152.  char nachZustand;
  153.  char ausgabeZeichen;
  154.  char verschiebung;
  155.  
  156.  
  157.  public Regeln(char zustand, char zeichen, char nachZustand, char ausgabeZeichen, char verschiebung)
  158.  {  
  159.      super();
  160.      this.zustand = zustand;
  161.      this.zeichen = zeichen;
  162.      this.nachZustand = nachZustand;
  163.      this.ausgabeZeichen = ausgabeZeichen;
  164.      this.verschiebung = verschiebung;
  165.  }
  166.  
  167.  //Methode zur Überprüfung des Zustandens und des Zeichens
  168.  boolean match(char zustand, char zeichen)
  169.  {
  170.      return (this.zustand == zustand) && (this.zeichen == zeichen);
  171.  }
  172.  
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement