D
docciman
Gast
Hi,
habe versucht so was ähnliche wie eine Turing Maschine zu programmieren..nun geht sie soweit nicht...
:roll:
das erste ist das ich nicht verstehe warum mein Index auf 10 hochzählt ? er dart nicht höher als das IndexArray ded Startwortes zählen also ("1","1","1","M","1","=") 0-5, und nach dem ablauf wie ich es definiert habe in der klasse state dürfte er eignentlich auch nicht aus dem bereich tretten ?!...
also der index zählt auf 10, weil ich transition() 10 durchlaufen lasse
for(int r=0;r<10;r++){
State.transition();
aber das will ich ja nicht.
Bitte um Hilfe :bahnhof:
danke ..es sind 3 Klassen
habe versucht so was ähnliche wie eine Turing Maschine zu programmieren..nun geht sie soweit nicht...
:roll:
das erste ist das ich nicht verstehe warum mein Index auf 10 hochzählt ? er dart nicht höher als das IndexArray ded Startwortes zählen also ("1","1","1","M","1","=") 0-5, und nach dem ablauf wie ich es definiert habe in der klasse state dürfte er eignentlich auch nicht aus dem bereich tretten ?!...
also der index zählt auf 10, weil ich transition() 10 durchlaufen lasse
for(int r=0;r<10;r++){
State.transition();
aber das will ich ja nicht.
Bitte um Hilfe :bahnhof:
danke ..es sind 3 Klassen
Code:
import java.util.ArrayList;
public class Tape {
static ArrayList band = new ArrayList();
public Tape() {
// Band mit den ersten Elementen füllen entspricht Startzustand der Tabelle !!
// nicht des Startwortes, diese ist in Turing definiert!!!
band.add("1");
band.add("1");
band.add("1");
band.add("R");
band.add("1");
}
}
// und nun die klasse State :
//Zustände ermitteln, und neue Zustände an neuen IndexPositionen setzten
public class State {
private static String state;
private static String stateHALT;
public static int aIndex=0;
private static boolean operation_HALT;
// Aktuellen Zustand ermitteln und setzen!
public static String current_State(){
state="";
if(Tape.band.get(0).equals("1")){
Tape.band.set(0,"1");
state ="1";
}
if(Tape.band.get(0).equals("2")){
Tape.band.set(0,"2");
state ="2";
}
if(Tape.band.get(0).equals("3")){
Tape.band.set(0,"3");
state ="3";
}
if(Tape.band.get(0).equals("4")){
Tape.band.set(0,"4");
state ="4";
}
return state;
}
public static void transition(){
//new Tape();
current_State();
// aIndex=0;
// wenn State auf "1" ist dann 4 Möglichkeiten
if (state.equals("1")){
if(Tape.band.get(1).equals("1")){
writeT("1");
aIndex++;//move("R");
Tape.band.set(0,"1");
current_State();
}
if(Tape.band.get(1).equals("M")){
writeT("M");
aIndex++;//move("R");
Tape.band.set(0,"1");
current_State(); }
if(Tape.band.get(1).equals("_")){
writeT("_");
aIndex++;//move("R");
Tape.band.set(0,"1");
current_State();
}
if(Tape.band.get(1).equals("=")){
writeT("_");
aIndex--;//move("L");
Tape.band.set(0,"2");
current_State();
}
}
// wenn State auf "2" ist dann 2 Möglichkeiten
if (state.equals("2")){
if(Tape.band.get(1).equals("1")){
writeT("=");
aIndex--;//move("L");
Tape.band.set(0,"3");
current_State();
}
if(Tape.band.get(1).equals("M")){
writeT("_");
aIndex--;//move("L");
state="HALT";
System.exit(0);
IO.write("ENDE");
current_State();
}
}
// wenn State auf "3" ist dann 2 Möglichkeiten
if (state.equals("3")){
if(Tape.band.get(1).equals("1")){
writeT("1");
aIndex--;// move("L");
Tape.band.set(0,"3");
current_State();
}
if(Tape.band.get(1).equals("M")){
writeT("M");
aIndex--;//move("L");
Tape.band.set(0,"4");
current_State();
}
}
// wenn State auf "4" ist dann 2 Möglichkeiten
if (state.equals("4")){
if(Tape.band.get(1).equals("_")){
writeT("_");
aIndex--;// move("L");
Tape.band.set(0,"4");
current_State();
}
if(Tape.band.get(1).equals("1")){
writeT("_");
aIndex++;// oder so move("R");
Tape.band.set(0,"1");
current_State();
}
}
}
public static int move(String move){
if(move.equals("R")){
aIndex++;
}
if(move.equals("L")){
aIndex--;
}
return aIndex;
}
public static int getIndex(){
return aIndex;
}
public static void writeT(String s){
try {
// getIndex();
Turing.startWort.set(aIndex,s);
}
catch (Exception e){}
}
}
// und noch die main Klasse :
import java.util.ArrayList;
public class Turing {
static ArrayList startWort = new ArrayList();
public static void main(String[] args)throws Exception {
new Tape();
// Startwort definieren
String [] ausKonsole={"1","1","1","M","1","="};
/*Start Wort füllen */
for(int i=0;i<ausKonsole.length;i++){
startWort.add(ausKonsole[i]);
}
// Startwort ausgeben, dann 2. Position etc..
for(int x=0;x<ausKonsole.length;x++){
IO.write(""+startWort.get(x));
}
// an die zweite stelle rücken
System.out.println();
//Transition starten
for(int r=0;r<10;r++){
State.transition();
//wieder das neue Wort ausgeben
for(int x=0;x<ausKonsole.length;x++){
IO.write(""+startWort.get(x));
}
System.out.println();
}
// Indexposition des Startwortes ausgeben
IO.write("\n die aktuelle IndexPos. von Start/End Wort : "+State.getIndex());
}
}