/***************************  Automat.java  ***********************************/

import AlgoTools.IO;

/**  Endlicher Automat mit delta : Zustand x Eingabe -> Zustand. 
 *   Ueberprueft, ob der eingegebene Binaerstring durch 3 teilbar ist.
 *   Syntaktisch korrekte Eingabe wird vorausgesetzt.   
 *   Zeichen '0' und '1' werden umgewandelt in Integer 0 bzw. 1.
 */

public class Automat {

  public static void main (String [] argv) {

    int[][] delta = {{0,1},                            // Ueberfuehrungsfunktion
                     {2,0},
                     {1,2}};
    int s;                                             // Nummer des Zustands
    int x;                                             // Nummer des Zeichens

    char[] zeile=IO.readChars("Bitte Binaerstring: "); // fordere Eingabe an
    
    s = 0;                                             // Startzustand
    
    for (int i=0; i < zeile.length; i++){              // fuer jedes Zeichen
    
       switch(zeile[i]) {                              // abhaengig vom Zeichen
         case '0': s = delta[s][0]; break;             // wende die Ueber- 
         case '1': s = delta[s][1]; break;             // fuehrungsfunktion an
         default: IO.println("Falsches Zeichen !");    // unzulaessiges Zeichen
       }
    }
    if (s==0) IO.println("ist durch 3 teilbar");       // Automat akzeptiert 
         else IO.println("ist nicht durch 3 teilbar"); // Automat lehnt ab
  }
}
