Du bist nicht angemeldet.

Werbeanzeige

1

26.12.2020, 12:32

turing maschine

Hallo zusammen. Ich soll auf eine binäre Zahl eine 1 addieren. Ich habe hier 4=100 genommen. Ist das Prinzip so richtig? Ich bin mir bei den Zustandswechseln nicht so sicher.
»MaxB96« hat folgendes Bild angehängt:
  • k.PNG

David Scherfgen

Administrator

Beiträge: 10 302

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

26.12.2020, 13:19

Irgendwas stimmt da nicht, denn du hast zwei Zustandsübergänge ausgehend von (Z1, 0), siehe 4. und 5. Zeile. Und so wie ich das sehe, sollte die Maschine, sobald sie aus einer Null eine Eins gemacht hat, bis links durchlaufen (ohne etwas zu ändern) und stoppen. Deine Maschine würde alle Nullen durch Einsen ersetzen. Du musst dir mit Hilfe eines neuen Zustandes merken, dass du bereits eine Null in eine Eins umgewandelt hast.

Vielleicht beschreibst du mal in Worten, wie deine Maschine funktionieren soll, also was deine Herangehensweise ist.

3

26.12.2020, 17:32

Die Maschine soll von links nach rechts laufen ohne was zu ändern, bis das Blank-zeichen kommt, weil so wie ich das verstanden habe, sagt dieses Zeichen(#) aus,dass dort Ende ist.Sobald er das Zeichen ließt soll der Schreib-LeseKopf eine Stelle nach links, eine 1 addieren und dann wieder ohne was zu verändern bis zum Ende durchlaufen.Es sei denn, man kann das so machen,dass der Schreib-LeseKopf sofort nach der Addition aufhört zu lesen, ich weiß aber nicht wie, deswegen will ich das er wieder bis zum #(Ende)durchläuft.
»MaxB96« hat folgendes Bild angehängt:
  • 23.PNG

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MaxB96« (26.12.2020, 17:44)


David Scherfgen

Administrator

Beiträge: 10 302

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

26.12.2020, 20:31

Jetzt fehlt dir eine Regel für (Z1, 1). Du hast nur eine für (Z1, 0).

Bedenke, dass deine Maschine auch für Zahlen wie 111 (binär) funktionieren muss. Da kommt gar keine Null vor. Korrektes Ergebnis wäre dann 1000 (binär), also eine Stelle länger als die Eingabe.

Ähnlicher Fall: 10111 + 1 = 11000

Überleg dir mal, wie das umgesetzt kriegst. Ich glaube, dass du noch eine Reihe weiterer Zustände brauchst.

Es gibt übrigens auch sehr schöne Tools, um diese Maschinen zu entwerfen und zu testen, z. B. hier: https://turingmachinesimulator.com/

5

27.12.2020, 00:29

Darf man so springen oder muss man nach der Reihenfolge nach gehen?
»MaxB96« hat folgendes Bild angehängt:
  • 11.PNG

David Scherfgen

Administrator

Beiträge: 10 302

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

27.12.2020, 10:27

Jetzt fehlt dir eine Regel für (Z1, 0).
Ich weiß nicht, was du mit "Springen" meinst. Die Reihenfolge, in welcher du die Regeln aufschreibst, spielt keine Rolle - falls du das meinst. Wichtig ist nur, dass du für jede Situation immer genau eine passende Regel hast. Nicht mehr, nicht weniger.
Probier doch bitte mal das von mir verlinkte Tool aus (oder ein beliebiges anderes). Dann kannst du anhand von ein paar Beispielen sehr gut testen, ob deine Maschine funktioniert oder nicht.

7

29.12.2020, 11:43

Vielen Dank für deine Hilfe, versuche das jetzt mit dem Simulator und ja, ich meinte die Reihenfolge der Regeln.


q0,_
q0,_,>

q0,1
q0,1,>

q0,0
q0,0,>

q0,#
q1,#,<

q1,0
q2,1,<

q1,1
q1,0,<

q2,0
q2,0,<

q2,1
q2,1,<

q1,_
q3,1,<


q2,_
q3,_,-


Das ist glaub ok. Meine Eingaben sind irgendeine Zahl+# am Ende. Beispiel(101010101#)

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »MaxB96« (29.12.2020, 12:09)


David Scherfgen

Administrator

Beiträge: 10 302

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

8

29.12.2020, 12:20

Scheint zu funktionieren (mit init: q0 und accept: q3).
Wenn du jetzt noch mit dem Begrenzungszeichen links von der Zahl klarkommst, dürfte es perfekt sein.

Werbeanzeige