Beschreibung zum Simulator zu Berechenbarkeitskonzepten (Turing

Beschreibung zum Simulator zu Berechenbarkeitskonzepten (Turing
Simulator zu den Berechenbarkeitskonzepten
Bernd Himmler, Daniel Stierhof, Werner Siedenburg, Anett Krause
2006
1
Inhaltsverzeichnis
1
2
3
4
5
Gliederung und Grundfunktionen des Programms
3
Tab 1 - Simulation einer Turingmaschine
4
2.1
Spezikation der Turingmaschine . . . . . . . . . . . . . . . . . .
4
2.2
Die Oberäche
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3
Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.1
Programm (Turingtabelle) laden
. . . . . . . . . . . . . .
6
2.3.2
Geladenes Programm abarbeiten
. . . . . . . . . . . . . .
6
2.3.3
Geladenes Programm neu laden . . . . . . . . . . . . . . .
6
2.3.4
Bandinhalt ändern . . . . . . . . . . . . . . . . . . . . . .
6
2.3.5
Band verschieben . . . . . . . . . . . . . . . . . . . . . . .
6
Tab 2 - Turingprogramm umwandeln
7
3.1
Die Oberäche
7
3.2
Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
3.2.1
Turingprogramm laden . . . . . . . . . . . . . . . . . . . .
8
3.2.2
In Turingtabelle umwandeln und speichern
8
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
Tab 3 - Simulation einer Registermaschine
9
4.1
Unterstützte Befehle der Registermaschine . . . . . . . . . . . . .
4.2
Die Oberäche
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
4.3
Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
4.3.1
Programm laden
. . . . . . . . . . . . . . . . . . . . . . .
4.3.2
Programm abarbeiten
. . . . . . . . . . . . . . . . . . . .
9
11
11
Simulation von GOTO, LOOP und WHILE-Programmen
12
5.1
Die Oberäche
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
5.2
Bedienung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.2.1
Datei laden . . . . . . . . . . . . . . . . . . . . . . . . . .
13
5.2.2
Programm abarbeiten
. . . . . . . . . . . . . . . . . . . .
13
5.2.3
Programm neu laden . . . . . . . . . . . . . . . . . . . . .
13
A Die *.ttb-Datei (Turingtabellen-Programm)
14
B Die *.tpr-Datei (Turing-Programm)
15
C Die *.asm-Datei (Registermaschinen-Programm)
16
D Die *.gto-Datei (GOTO-Programm)
17
E Die *.whl-Datei (WHILE-Programm)
18
F Die *.loo-Datei (LOOP-Programm)
19
2
1
Gliederung und Grundfunktionen des Programms
Das Programm hat mehrere Grundfunktionen:
ˆ
Simulation einer Turingmaschine
ˆ
Umwandlung von Turing-Programmen in Turing-Tabellen
ˆ
Simulation einer Registermaschine
ˆ
Simulation von GOTO-Programmen
ˆ
Simulation von WHILE-Programmen
ˆ
Simulation von LOOP-Programmen
Diese Grundfunktionen sind in der Programm-Oberäche einzeln über so genannte Tabs aufrufbar. Dazu müssen Sie lediglich auf das entsprechende Tab
klicken. Somit ist das ausgewählte Tab mit der dazugehörigen Oberäche im
Vordergrund, alle anderen sind im Hintergrund. Die einzelnen Unterprogramme
sind unabhängig voneinander lauähig. D.h. es kann beispielsweise eine Turingmaschine (Tab 1) simuliert werden und im Hintergrund ein Registermaschinenprogramm (Tab 3) abgearbeitet werden. Abbildung 1 zeigt einen Screenshot mit
den verschiedenen Tabs. Im Folgenden wird näher auf die einzelnen Funktionen
eingegangen.
Abbildung 1: Tabs für unterschiedliche Simulationen von Programmarten
1 gestartet werden.
Das Simulationsprogramm kann über die TRY-Oberäche
1
TRY=TRain Yourself
3
2
Tab 1 - Simulation einer Turingmaschine
2.1 Spezikation der Turingmaschine
Das Programm simuliert eine Turingmaschine mit folgenden Eigenschaften:
ˆ
ein unendliches Band
ˆ
einen Schreib-/Lesekopf
ˆ
ein unendliches Alphabet
2.2 Die Oberäche
Abbildung 2: Oberäche von Tab1 (Turingmaschine)
Abbildung 2 zeigt die grasche Benutzeroberäche von Tab1:
[1]
Button
Datei laden:
Über diesen Button wird ein Datei-önen Dialog zur Verfügung gestellt.
[2]
Button
Datei neu laden:
Es kann das zuletzt erfolgreich geladene Programm erneut geladen werden.
[3]
Button
Bandbelegung ändern:
Hier kann die Belegung des Bandes geändert werden.
[4] Anzeige des Eingabealphabets:
Ist ein Programm geladen, wird hier das Eingabealphabet dargestellt.
4
[5] Anzeige des Ausgabealphabets:
Ist ein Programm geladen, wird hier das Ausgabealphabet dargestellt. Das
-Symbol symbolisiert Programmende.
[6] Anzahl der Schritte:
Anzeige der benötigten Schritte für die Bearbeitung des Programms.
[7]
Button
Step:
Mit Hilfe dieses Buttons kann ein Einzelschritt für die Abarbeitung ausgeführt werden.
[8]
Button
Run:
Dieser Button aktiviert die automatische Abarbeitung des geladenen Programms mit einstellbarer Abarbeitungsgeschwindigkeit.
[9]
Button
Stop:
Dieser Button deaktiviert die automatische Abarbeitung des geladenen
Programms.
[10] Schiebebalken für Geschwindigkeit des Run-Modus:
Hier kann die Wartezeit zwischen zwei Steps beim automatischen Ablaufen
eingestellt werden.
[11] Anzeige des Bands:
Anzeige für das aktuelle Band.
[12] Anzeige des Lese/Schreibkopfes:
Das ^-Symbol stellt den Lese/Schreibkopf dar.
[13]
Buttons
zum Band verschieben:
Mit Hilfe der Buttons kann das Band nach links bzw. rechts verschoben
werden.
[14] Anzeige des geladenen Programms:
In dieser Tabelle wird das geladene Band dargestellt. Eine Zeile ist jeweils
ein Zustand, die Spalten sind die jeweiligen Regeln für den Zustand. Der
erste Zustand ist immer der Zustand 0.
[15]
Button
Hilfe:
Ein Klick önet ein Fenster mit einer Bedienungsanleitung.
5
2.3 Bedienung
2.3.1
Programm (Turingtabelle) laden
Als Erstes sollte man ein Programm für die Turingmaschine laden. Hierzu muss
eine *.ttb-Datei geladen werden. Klicken Sie hierfür auf <Datei laden>. Es
önet sich ein Datei-önen Dialog. Hier können Sie nun die zu ladende Datei
auswählen. Danach klicken Sie auf <OK>. Nun wird das geladene Programm
in der Tabelle dargestellt. Des Weiteren wird das Ein- und Ausgabealphabet
und das Band dargestellt. Weitere Informationen zu *.ttb-Dateien nden Sie im
Anhang auf Seite 14
Sollte eine Datei mit einer anderen Dateiendung geladen werden, wird automatisch auf das zugehörige Tab umgeschaltet. Wird die Dateiendung nicht
unterstützt, wird eine Fehlermeldung ausgegeben.
2.3.2
Geladenes Programm abarbeiten
Ist ein Programm geladen, kann dieses entweder durch Einzelschritte oder automatisch abgearbeitet werden. Um einen Einzelschritt auszuführen, klicken Sie
einfach auf <Step>. Das Programm wird nun einen Schritt ausführen. Um die
automatische Abarbeitung zu starten, klicken Sie auf <Run>. Das Programm
wird nun automatisch Schritte mit der eingestellten Geschwindigkeit ausführen.
Die Abarbeitungsgeschwindigkeit kann jederzeit mit Hilfe des Schiebebalkens
verändert werden. Die automatische Abarbeitung kann jederzeit durch einen
Klick auf <Stop> beendet werden.
Des Weiteren können auch während der automatischen Abarbeitung Einzelschritte durch Klicken auf <Step> hinzugefügt werden. Dies ist bei einer
langsamen Abarbeitungsgeschwindigkeit sinnvoll.
Während der Abarbeitung wird jeweils eine Zeile in der Programmdarstellung markiert. Dies entspricht dem aktuellen Zustand der Turingmaschine
2.3.3
Geladenes Programm neu laden
Ist ein Programm fertig abgearbeitet, kann das letzte erfolgreich geladene Programm neu geladen werden, um es noch einmal auszuführen.
2.3.4
Bandinhalt ändern
Ist ein Programm geladen, kann der Bandinhalt über <Bandinhalt ändern> verändert werden. Dies ist sinnvoll wenn ein Programm mit verschiedenen Bandbelegungen ausgeführt werden soll. So muss nicht die Bandbelegung in der Datei
verändert werden. Informationen zu den *.ttb-Dateien nden Sie im Anhang
auf Seite 14
2.3.5
Band verschieben
Ist ein Programm geladen, so wird dessen Bandbelegung dargestellt. Das Band
kann jederzeit mit Hilfe des entsprechenden Buttons nach links bzw. rechts
verschoben werden.
6
3
Tab 2 - Turingprogramm umwandeln
Mit Hilfe dieses Programms können so genannte Turingprogramme in simulierbare Turing-Tabellen umgewandelt werden. Dazu kann eine *.tpr-Datei mit einem Turingprogramm geladen werden und diese in eine äquivalente *.ttb-Datei
gespeichert werden. Informationen zu den Dateien nden Sie im Anhang auf
den Seiten 14 und 15.
3.1 Die Oberäche
Abbildung 3: Oberäche von Tab2 (Turingprogramm umwandeln)
Abbildung 3 zeigt die grasche Benutzeroberäche von Tab2:
[1]
Button
Datei laden:
Hier kann eine *.tpr-Datei geladen werden.
[2] Programmname:
Hier wird der Dateiname des geladenen Programms angezeigt.
[3] Anzeige des geladenen Programms:
Hier wird der Inhalt der geladenen *.tpr-Datei angezeigt.
[4]
Button
>>>:
Startet die Umwandlung in eine Turingtabelle.
[5] Anzeige des umgewandelten Programms:
Hier wird das umgewandelte Programm als Turingtabelle dargestellt.
[6]
Button
Hilfe:
Ein Klick önet ein Fenster mit einer Bedienungsanleitung.
7
3.2 Bedienung
3.2.1
Turingprogramm laden
Klicken Sie auf <Datei laden>. Es erscheint ein Datei-önen-Dialog. Hier können Sie nun die zu ladende Datei auswählen. Bestätigen Sie mit <Ok>, nun wird
die Datei geladen. Das Programm erwartet eine *.tpr-Datei. Informationen zu
diesem Dateityp nden Sie im Anhang auf Seite 15.
Sollte eine Datei mit einer anderen Dateiendung geladen werden, wird automatisch auf das zugehörige Tab umgeschaltet. Wird die Dateiendung nicht
unterstützt, wird eine Fehlermeldung ausgegeben.
3.2.2
In Turingtabelle umwandeln und speichern
Wurde ein Turingprogramm fehlerfrei geladen, so kann dies nun in eine Turingtabelle umgewandelt werden. Klicken Sie hierzu auf den Button mit dem
>>>-Zeichen.
Es önet sich nun ein Datei-speichern-Dialog. Hier müssen Sie
nun einen Dateinamen und Speicherort für die *.ttb-Datei angeben. Bestätigen
Sie mit <OK>. Nun wird das Programm umgewandelt und in die angegebene
Datei gespeichert. Das umgewandelte Programm wird auch in der Tabelle auf
der rechten Seite dargestellt.
8
4
Tab 3 - Simulation einer Registermaschine
Das Unterprogramm simuliert eine 32-Bit Registermaschine mit 16 Datenspeichern. Programme können über *.asm-Dateien eingelesen werden. Maximal werden 100 Programmzeilen unterstützt.
4.1 Unterstützte Befehle der Registermaschine
Transportbefehle
LDA adresse
LDK zahl
STA adresse
(Load from memory to Accumulator)
Lade den Inhalt von
adresse
Lade Konstante
in den Akkumulator. So bedeutet z. B.
LDK 27:
zahl
in den Akkumulator.
Lade die Zahl 27 in den Akkumulator.
(STore Accumulator to memory)
Speichere den Akkumulatorinhalt an
adresse.
Verarbeitungsbefehle
ADD adresse
SUB adresse
MUL adresse
DIV adresse
adresse.
adresse.
von adresse.
von adresse.
ADDiere zum Akkumulatorinhalt den Inhalt von
SUBtrahiere vom Akkumulatorinhalt Inhalt von
MULtipliziere mit dem Akkumulatorinhalt den
DIVidiere Akkumulatorinhalt durch den Inhalt
Sprungbefehle
JMP adresse
JEZ adresse
JNE adresse
JLZ adresse
JLE adresse
JGZ adresse
JGE adresse
(JuMP) Springe an
adresse,
d. h. schreibe
fehlszähler.
(Jump Equal Zero) Springe an
adresse,
adresse
in den Be-
wenn Akkumulator-
wert = 0, ansonsten erhöhe Befehlszähler um 1.
(Jump Not Equal zero) Springe an
adresse,
wenn Akkumula-
torwert ungleich 0, ansonsten erhöhe Befehlszähler um 1.
(Jump if Lower Zero) Springe an
torwert
<
adresse,
(Jump if Lower or Equal zero) Springe an
kumulatorwert
≤
>
adresse,
wenn Ak-
0, ansonsten erhöhe Befehlszähler um 1.
(Jump if Greater Zero) Springe an
torwert
wenn Akkumula-
0, ansonsten erhöhe Befehlszähler um 1.
adresse,
wenn Akkumula-
0, ansonsten erhöhe Befehlszähler um 1.
(Jump if Greater or Equal zero) Springe an
Akkumulatorwert
≥
adresse,
wenn
0, ansonsten erhöhe Befehlszähler um 1.
Sonstige Befehle
INP adresse
OUT adresse
HLT 99
adresse.
adresse (Akkumulator
Eingabe nach
Ausgabe aus
Programmende.
9
hat die Adresse 00)
4.2 Die Oberäche
Abbildung 4: Oberäche von Tab3 (Registermaschine)
Abbildung 4 zeigt die grasche Benutzeroberäche von Tab3:
[1]
Button
Datei laden:
Önet einen Datei-önen Dialog, in dem ein Programm ausgewählt werden
kann.
[2] Darstellung des geladenen Programms:
Ist ein Programm geladen, wird es hier dargestellt.
[3] Befehlszähler:
zeigt die Position des Befehlszählers (also die Zeilennummer im Programm)
an.
[4] Akkumulator: Hier wird der aktuelle Wert des Akkumulators dargestellt.
[5] Befehlsregister:
Hier wird der aktuelle Wert des Befehlsregisters dargestellt.
[6] Darstellung der Datenspeicher:
Hier werden die aktuellen Werte der einzelnen Datenspeicher angezeigt.
[7]
Button
Step:
Durch einen Klick auf diesen Button kann ein Einzelschritt für die Abarbeitung des Programms ausgeführt werden.
10
[8]
Button
Run:
Durch einen Klick auf diesen Button kann die automatische Abarbeitung
des Programms gestartet werden.
[9]
Button
Stop:
Dieser Button deaktiviert den Run-Modus.
[10] Schiebebalken zur Geschwindigkeitseinstellung:
Mit Hilfe des Schiebebalkens kann die Geschwindigkeit der automatischen
Abarbeitung eingestellt werden.
[11]
Button
Reset:
Durch einen Klick auf den Button wird die Registermaschine zurückgesetzt.
[12]
Button
Hilfe:
Ein Klick önet ein Fenster mit einer Bedienungsanleitung.
4.3 Bedienung
4.3.1
Programm laden
Als Erstes sollte man ein Programm für die Registermaschine laden. Dieses
muss in Form einer *.asm-Datei vorliegen. Klicken Sie auf <Datei laden>. Es
önet sich ein Datei-önen Dialog. Hier können Sie nun die zu ladende Datei
auswählen. Danach klicken Sie auf <OK>. Nun wird das geladene Programm
ohne die Kommentare dargestellt. Informationen zu *.asm-Dateien nden Sie
im Anhang auf Seite 16.
Sollte eine Datei mit einer anderen Dateiendung geladen werden, wird automatisch auf das zugehörige Tab umgeschaltet. Wird die Dateiendung nicht
unterstützt, wird eine Fehlermeldung ausgegeben.
4.3.2
Programm abarbeiten
Wurde ein Programm geladen, kann dieses nun abgearbeitet werden. Dies geschieht entweder im Einzelschritt-Modus oder im Automatik-Modus. Durch Klicken auf <Step> wird ein Programmschritt ausgeführt. Erwartet das Programm
eine Eingabe des Benutzers (bei einem INP-Befehl), erscheint eine Eingabebox.
Den Automatik-Modus startet man durch einen Klick auf <Run>. Nun wird das
Programm automatisch abgearbeitet. Wird eine Eingabe durch den Benutzer erwartet, so erscheint auch hier eine Eingabebox. Hat man einen Wert eingegeben
und bestätigt, so wird das Programm sofort weiter automatisch abgearbeitet.
Der Automatik-Modus kann jederzeit durch einen Klick auf <Stop> verlassen
werden. Des Weiteren kann auch jederzeit die Geschwindigkeit der Abarbeitung
über den Schiebebalken eingestellt werden.
Während der Abarbeitung wird die entsprechende Programmzeile markiert,
so kann man stets verfolgen wie weit das Programm schon abgearbeitet wurde.
Die diversen Anzeigen (Akkumulator, Datenspeicher, ...) geben Auskunft über
den aktuellen Zustand der Registermaschine.
Möchte man ein Programm noch einmal ausführen, so kann man die Registermaschine durch Klicken auf <Reset> in den Anfangszustand bringen: Der
Befehlszähler wird auf den ersten Befehl gesetzt, der Akkumulator und die Datenspeicher werden gelöscht.
11
5
Simulation von GOTO, LOOP und WHILEProgrammen
Die Benutzeroberäche und die Bedienung ist bei allen drei Unterprogrammen
identisch. Daher wird bei der Behandlung dieser Punkte nicht näher auf die
einzelnen Unterprogramme eingegangen. Die Unterschiede der Unterprogramme
werden weiter unten aufgezeigt.
5.1 Die Oberäche
Alle drei Tabs 4, 5 und 6 haben dieselben Benutzeroberächenelemente. Abbildung 5 zeigt die Oberäche von Tab 5 (WHILE-Programme).
Abbildung 5: Oberäche von Tab5 (WHILE-Programm)
[1]
Button
Datei laden:
Hier kann eine Datei mit entsprechender Datei-
endung geladen werden.
[2]
Button
Step:
Durch Klicken wird ein Einzelschritt zur Programmabar-
beitung ausgeführt.
[3]
Button
Run:
Startet die automatische Programmabarbeitung.
[4]
Button
Stop:
Stoppt die automatische Programmabarbeitung.
[5] Schiebebalken zur Geschwindigkeitseinstellung:
Hier kann die Ge-
schwindigkeit für die automatische Abarbeitung eingestellt werden.
12
[6]
Button
Datei neu laden:
Hier kann durch einen Klick das zuletzt einge-
lesene Programm erneut geladen werden.
[7] Darstellung der Variablen:
Hier werden die Variablen des geladenen
Programms und deren aktuelle Werte angezeigt.
[8] Darstellung des geladenen Programms:
Hier wird das geladene Pro-
gramm dargestellt. Des Weiteren wird der aktuelle Programmschritt angezeigt, indem das dazugehörige Feld markiert wird.
[9]
Button
Hilfe:
Ein Klick önet ein Fenster mit einer Bedienungsanleitung
.
5.2 Bedienung
5.2.1
Datei laden
Es muss jeweils eine Datei mit einem entsprechenden Programm geladen werden:
ˆ
GOTO Simulation: *.gto-Datei (Anhang Seite 17)
ˆ
WHILE Simulation: *.whl-Datei (Anhang Seite 18)
ˆ
LOOP Simulation: *.loo-Datei (Anhang Seite 19)
Dies geschieht jeweils durch einen Klick auf <Datei laden>. Es önet sich ein
Dialog, in dem die entsprechende Datei ausgewählt werden kann. Durch Bestätigen mit <OK> wird die Datei geladen.
Sollte eine Datei mit einer anderen Dateiendung geladen werden, wird automatisch auf das zugehörige Tab umgeschaltet. Wird die Dateiendung nicht
unterstützt, wird eine Fehlermeldung ausgegeben.
5.2.2
Programm abarbeiten
Wurde ein Programm fehlerfrei geladen, so kann dieses nun abgearbeitet werden. Alle drei Unterprogramme haben einen Einzelschritt-Modus und einen automatischen Modus zum Programm abarbeiten. Durch einen Klick auf <Step>
wird ein Einzelschritt ausgeführt. Klickt man auf <Run>, so wird das geladene
Programm fortan automatisch abgearbeitet. Die Geschwindigkeit kann über den
Schiebebalken eingestellt werden. Das Programm wird nun solange abgearbeitet,
bis der automatische Modus durch <Stop> beendet wird oder das Programm
sein Ende erreicht hat.
Während der automatischen Abarbeitung können zusätzliche Einzelschritte
hinzugefügt werden. Dies ist bei einer langsamen Abarbeitungsgeschwindigkeit
sinnvoll.
5.2.3
Programm neu laden
Durch einen Klick auf <Datei neu laden> wird das bereits geladene Programm
erneut eingeladen. Dies ist sinnvoll, wenn das Programm zu Ende simuliert
wurde und erneut simuliert werden soll. Ein weiterer sinnvoller Anwendungsfall
ist die Programmerstellung: Hier kann mit einem Texteditor die jeweilige Datei
verändert werden und durch einen Klick sofort wieder geladen und ausprobiert
werden.
13
A
Die *.ttb-Datei (Turingtabellen-Programm)
*.ttb-Dateien sind Textdateien, die Turingtabellen (Programme zur Abarbeitung durch die Turingmaschine) beinhalten:
ˆ
In der ersten Zeile muss die Vorbelegung des Bands stehen
ˆ
Jede weitere Zeile repräsentiert einen Zustand der Turingmaschine
ˆ
Ein Zustand hat Regeln, diese sind durch ein Semikolon getrennt
ˆ
Jede Regel ist so aufgebaut:
1. Zeichen:
vom Band gelesenes Zeichen,
2. Zeichen:
zu schreibendes Zeichen,
Kopfbewegung
(-1: links, 1: rechts, 0: keine Bewegung),
3. Zeichen:
Nummer des neuen Zustands
(Zeilennummer+1, da in 1. Zeile ja Bandbelegung)
4. Zeichen:
Jeweils durch ein Komma getrennt.
//
ˆ
Jede Zeile, die einen Zustand enthält, muss durch
ˆ
Nach
ˆ
Der Endzustand wird durch ein ~-Symbol als zu schreibendes Zeichen in
//
kann ein Kommentar eingefügt werden.
einer Regel symbolisiert
Listing 1 zeigt ein Programm zum Verdoppeln von Einsen.
Listing 1: verdoppeln.ttb
1
2
3
4
5
6
7
8
9
beendet werden
1111111111
0 ,0 ,0 ,0 ; 1 , # ,1 ,1 ; # ,# ,0 ,0 ; // Zustand 0
0 ,0 ,0 ,1 ; 1 ,1 ,1 ,1 ; # ,# ,1 ,2 ; // Zustand 1
0 ,0 ,0 ,2 ; 1 ,1 ,1 ,2 ; # ,1 ,1 ,3 ; // . . .
0 ,0 ,0 ,3 ; 1 ,1 ,0 ,3 ; # ,1 ,0 ,4 ; //
0 ,0 ,0 ,4 ; 1 ,1 , -1 ,4 ; # ,# , -1 ,5 ; //
0 ,0 ,0 ,5 ; 1 ,1 , -1 ,6 ; # ,# ,0 ,7 ; //
0 ,0 ,0 ,6 ; 1 ,1 , -1 ,6 ; # ,# ,1 ,0 ; //
0 ,~ ,0 ,7 ; 1 ,~ ,0 ,7 ; # ,~ ,0 ,7 ; //
14
B
Die *.tpr-Datei (Turing-Programm)
*.tpr-Dateien sind Textdateien, die Turing-Programme enthalten, die zur Ausführung mit der Turingmaschine in Turing-Tabellen umgewandelt werden können.
ˆ
In der ersten Zeile muss die Vorbelegung des Bands stehen
ˆ
Vor Beginn eines neuen Zustandes muss ein Kommentar eingefügt werden,
der den Zustand beschreibt.
//
ˆ
Der Kommentar wird mit
ˆ
Nach dem Kommentar werden die Regeln des Zustands mit den Schlüs-
eingeleitet.
selwörtern beschrieben:
ˆ IF
Eingabezeichen
ˆ WRITE
Ausgabezeichen
ˆ LEFT / RIGHT
Kopfbewegung (Soll sich der Kopf nicht bewegen, so ist
nichts anzugeben)
ˆ JUMP
Folgezustand. Wenn nicht angegeben, dann bleibt der aktuelle Zu-
stand
ˆ HALT
Kennzeichnung des Endzustands
Listing 2 verdeutlicht die Syntax.
Listing 2: test.tpr
1
2
3
4
5
6
7
8
9
10
11
12
13
00110111
// Zustand
IF 0 WRITE
IF 1 WRITE
IF # WRITE
// Zustand
IF 0 WRITE
IF 1 WRITE
IF # WRITE
// Zustand
IF 0 WRITE
IF 1 WRITE
IF # HALT
1
0
1
#
2
1
0
1
3
0
1
RIGHT
RIGHT
LEFT JUMP 1
LEFT JUMP 2
LEFT
LEFT JUMP 2
LEFT
LEFT
15
C
Die *.asm-Datei (Registermaschinen-Programm)
*.asm-Dateien sind Textdateien, die Programme für die Registermaschine beinhalten. Beachten Sie, dass die Datei maximal 100 Befehle enthalten darf.
ˆ
Befehlen muss eine Zeilennummer vorangestellt werden
ˆ
Kommentare beginnen mit einem Semikolon
ˆ
reine Kommentarzeilen sind erlaubt
ˆ
leere Zeilen sind erlaubt
Listing 3 zeigt ein Programm zur Berechnung der Summe von Eingaben.
Listing 3: summe.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
; ********* Zahl einlesen *****************************
01 INP 01 ; Zahl einlesen , nach Datensp . 1 schreiben
; ********* Wenn Zahl = 0 , dann Sprung zu Prg . ende ****
02 LDA 01 ; Lade Zahl von Adresse 1 in den Akku
03 JEZ 07 ; Falls Akku = 0 , springe an Prg . adr . 7
; ********* Zahl auf bisherige Summe aufaddieren ******
04 ADD 02 ; Addiere auf Akku Inhalt von Adresse 2
05 STA 02 ; Speichere Akku an Adresse 2
; ********* Sprung auf Programmanfang
****************
06 JMP 01 ; Springe zurück an Programmadr . 1 ( INP 01)
; ********* Summe ausgeben und Programmende ***********
07 OUT 02 ; Gib Inhalt von Adresse 2 aus
08 HLT 99 ; Programmende
16
D
Die *.gto-Datei (GOTO-Programm)
*.gto-Dateien sind Textdateien, die GOTO-Programme beinhalten. Informationen zu der prinzipiellen Syntax von GOTO-Programmen nden Sie im Buch
Grundlagen der Informatik.
ˆ
Pro Zeile darf nur ein Zuweisungs- oder Bedingungskonstrukt stehen. Am
Anfang der Zeile kann ein Label stehen.
ˆ
Zwischen Variablen und Operatoren müssen Leerzeichen sein
ˆ
leere Zeilen sind nicht erlaubt
ˆ
Kommentare sind nicht erlaubt
ˆ
Einrückungen durch Leerzeichen oder Tabulatoren sind erlaubt
ˆ
Variablen sind nicht auf einzelne Zeichen beschränkt. Sie dürfen Zeichenketten sein. Jedoch dürfen Sie nur Kleinbuchstaben enthalten!
ˆ
Schlüsselwörter müssen stets groÿ geschrieben werden!
Listing 4 zeigt ein GOTO-Programm zur Berechnung des Produkts von zwei
Zahlen.
Listing 4: multi.gto
1
2
3
4
5
6
7
8
9
10
multi1 :
multi2 :
num1 : = 4
num2 : = 12
produkt : = 0
hv1 : = 0
hv2 : = 0
produkt : = SUCC ( produkt )
hv2 : = SUCC ( hv2 )
IF hv2 < num2 GOTO multi2
hv1 : = SUCC ( hv1 )
IF hv1 < num1 GOTO multi1
17
E
Die *.whl-Datei (WHILE-Programm)
*.whl-Dateien sind Textdateien, die WHILE-Programme beinhalten. Informationen zu der Syntax von WHILE-Programmen nden Sie im Buch Grundlagen
der Informatik.
ˆ
Pro Zeile darf nur ein Zuweisungs-, Bedingungs- oder Schleifenkonstrukt
stehen
ˆ
Zwischen Variablen und Operatoren müssen Leerzeichen sein
ˆ
leere Zeilen sind nicht erlaubt
ˆ
Kommentare sind nicht erlaubt
ˆ
Variablen sind nicht auf einzelne Zeichen beschränkt. Sie dürfen Zeichenketten sein. Jedoch dürfen sie nur Kleinbuchstaben enthalten!
ˆ
Schlüsselwörter müssen stets groÿ geschrieben werden!
Listing 5 zeigt ein Programm zur Berechnung des Produkts von zwei Zahlen.
Listing 5: multi.whl
1
2
3
4
5
6
7
8
9
10
11
12
a := 2
b := 5
m := 0
produkt : = 0
WHILE SUCC ( m ) <= a DO
z := 0
WHILE SUCC ( z ) <= b DO
produkt : = SUCC ( produkt )
z : = SUCC ( z )
DONE
m : = SUCC ( m )
DONE
18
F
Die *.loo-Datei (LOOP-Programm)
*.loo-Dateien sind Textdateien, die LOOP-Programme beinhalten. Informationen zu der prinzipiellen Syntax von LOOP-Programmen nden Sie im Buch
Grundlagen der Informatik.
ˆ
Pro Zeile darf nur ein Zuweisungs-, Bedingungs- oder Schleifenkonstrukt
stehen
ˆ
Zwischen Variablen und Operatoren müssen Leerzeichen sein
ˆ
leere Zeilen sind nicht erlaubt
ˆ
Kommentare sind nicht erlaubt
ˆ
Einrückungen durch Leerzeichen oder Tabulatoren sind erlaubt
ˆ
Variablen sind nicht auf einzelne Zeichen beschränkt. Sie dürfen Zeichenketten sein. Jedoch dürfen sie nur Kleinbuchstaben enthalten!
ˆ
Schlüsselwörter müssen stets groÿ geschrieben werden!
Listing 6 zeigt ein Programm zur Berechnung der Summe von Eingaben.
Listing 6: summe.loo
1
2
3
4
5
6
7
8
9
10
11
k := 0
l := 1
FOR i : = 1 TO 10 DO
FOR j : = 1 TO i DO
IF SUCC ( j ) < i THEN
k : = SUCC ( k )
ELSE
l : = SUCC ( l )
ENDIF
DONE
DONE
19
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertising