Die RM-Software erlaubt das Erstellen von RM-Programmen. Sie funktioniert mit eingeschaltetem JavaScript in den meisten modernen Browsern.
Weitere Informationen von Inge Schwank zur Einführung in algorithmisches Denken auf
- formal-symbolischer Ebene: Registermaschine - enaktiv-haptischer / ikonisch-dynamischer Ebene: Dynamische Labyrinthe
Implementation im Austausch mit Inge Schwank: Steffen Vogel
Feedback: Inge Schwank
Sei i ∈ ℕ, i > 0. Seien weiter:
Ri die Bezeichnung für das Register i der Registermaschine;
[Ri] die Bezeichnung für den Inhalt des Registers i, dieser kann eine beliebige natürliche Zahl sein.
Syntax
I. Elementarbefehle
Ia. Ai sind RM-Programme.
Ib. Si sind RM-Programme.
II. Konstruktionsprozesse
IIa. Sind P und Q RM-Programme, dann ist auch PQ ein RM-Programm.
IIb. Ist P ein RM-Programm, dann ist auch (i P) ein RM-Programm.
III. In der Implementierung
Abschluss des RM-Programmes mit einem Punkt.
Semantik
I. Elementarbefehle
Ia. Vorwärtszählen: Ai erhöht den Inhalt von Ri um eins.
Ib. Rückwärtszählen: Ist [Ri] > 0, dann verringert Si den Inhalt von Ri um eins, andernfalls bleibt sein Inhalt null.
II. Konstruktionsprozesse
IIa. Hintereinanderausführung: PQ führt zunächst P aus, anschließend Q.
IIb. Gesteuerte Wiederholung: (i P) führt so lange P aus, bis der Wert von Register i gleich null ist.
III. In der Implementierung
Befehl Punkt erreicht: Beendigung der Abarbeitung eines RM-Programms.
Pi<α> = Q ist eine gültige Programmdefinition, wenn
P ∈ {A, ... Z}.
i ∈ {a, ... z}.
α eine Liste von Indizes ist, wobei:
i ist eine Liste, mit i ∈ {a, ... z}.
wenn β eine Liste ist, dann ist auch β, i eine Liste, mit i ∈ {a, ... z}.
Q ein gültiges Programm ist (wie oben definiert), nur mit i ∈ {a, ... z}.
i oder <α> können weggelassen werden, wobei wenigstens eines von beiden angegeben werden muss.
Die Programme Ai und Si können nicht überschrieben werden.
Semantik
Die Semantik der Unterprogramme entspricht größtenteils der des Programms.
Kleinbuchstaben sind Variablen. Sie werden bei der Ausführung durch Zahlen ersetzt, die Registern entsprechen. Variablen, die keine Argumente sind, d.h. nicht auf der linken Seite des Gleichheitszeichens vorkommen, werden als Hilfsregister verstanden. Hilfsregister werden je nach Bedarf während der Ausführung des Programms angelegt und gelöscht und nicht im Bereich Register angegeben.
Beispiel eines (vordefinierten) Unterprogramms: Ti<j>=(j SjAi).
Beim Aufruf von Ti<j> im Programm werden die Variablen i und j durch Register ersetzt, z.B. T2<1>. Ausgeführt wird bei diesem Aufruf (1 S1A2).
Wird eine Funktion f durch ein RM-Programm Pf berechnet, so kann mit der Rechenschrittzahlfunktion RSPf angeben werden, welcher Aufwand zur Berechung notwendig ist. In die Aufwandsberechung gehen alle ausgeführten Elementarbefehle ein, also alle zur Berechnung notwendigen Fälle der Ausführung von Ai und Si ein.
Beispiel:
Mit Pa: (1S1A2) ist die Funktion a(x1,x2)=x1+x2 berechenbar.
Der Berechungsaufwand hängt in diesem Fall nur von x1, nicht aber von x2 ab.
Zu Pa ergibt sich die Rechenschrittzahl-Funktion: RSPa(x1)=2x1
Schnellstart
Es sind zwei Modi zu unterscheiden:
Programmeingabe /-bearbeitung
Programmablauf
Um zwischen diesen beiden Modi zu wechseln, muss ein (syntaktisch) korrektes RM-Programm
in dem bis auf einen schwarzen Punkt freien, rechteckigen, weißen Eingabefeld eingegeben sein. Ob das RM-Programm inklusive RM-Unterprogramme lauffähig ist, zeigen die Häkchen bzw. Kreuzchen neben den jeweiligen Eingabefeldern.
Der Wechsel erfolgt mittels des Umschalt-Buttons "Programm initialisieren" / "Programm bearbeiten",
der links oben, direkt unter der Überschrift "RM-Programm" platziert ist.
RM-App
Register
Das Hauptprogramm benötigt mehr Register als angelegt wurden.
R1:
R2:
R3:
R4:
Registerwerte setzen auf:
RM-Programm
.
✓
RM-Unterprogramme
Standardprogramme beim Initialisieren laden
Programmverlauf
(mit Rekursionskeller)
Rechenschritte: 0
Das Programm könnte in einer Endlosschleife gefangen sein, da viele Änderungen am Rekursionskeller vorgenommen werden, ohne dass Ai oder Si aufgerufen werden. Bitte überprüfen Sie das Programm und, wenn Sie es weiter ausführen lassen möchten, klicken Sie erneut einen der Schritte-Buttons.
Das Programm versucht, ein Unterprogramm aufzurufen, das nicht definiert wurde. Bitte wechseln Sie in den "Programm bearbeiten"-Modus und definieren Sie das Unterprogramm.
Steuerung
Einzelschritt
automatische Schritte mit einer Pause von
Ergebnis berechnen hält nach Schritten
Optionen
Anzahl der Rechenschritte anzeigen
Programmverlauf anzeigen
Programme speichern und laden
vordefinierte Unterprogramme ausgeben, falls sie beim Initialisieren geladen werden
speichern:
laden:
Vordefinierte RM-Unterprogramme
In der Regel stehen in den Klammern die Register, in denen gestartet wird, und im Index das Zielregister. Bitte beachten Sie, dass diese vordefinierten RM-Unterprogramme mit eigenen Definitionen überschrieben werden können.
Die RM-Software besteht aus zwei Hauptteilen. Im ersten Teil, bestehend aus Register und Programm, wird das aktuelle Programm mit all seinen Bestandteilen definiert. Im zweiten Teil mit der Überschrift Steuerung wird das Programm ausgeführt. Es ist jeweils nur einer der beiden Teile aktiv. Der aktive Teil ist weiß hinterlegt und der inaktive grau. Man kann nur im jeweils aktiven Teil Änderungen vornehmen und Aktionen ausführen.
Um zwischen den Hauptteilen zu wechseln, klickt man den Programm initialisieren-Button (bzw. Programm bearbeiten) oberhalb der Hauptteile.
Man kann nur zum Ausführbereich wechseln, wenn alle Definitionen syntaktisch korrekt sind und man hinreichend viele Register (ohne Hilfsregister) angelegt hat. Syntaktisch inkorrekte Programme werden rot umrandet und bei fehlenden Registern wird eine Warnung ausgegeben.
Wechselt man zum Definitionsbereich, wird die aktuelle Rechnung abgebrochen.
Bitte beachten Sie, dass die RM-Software nicht allein mit der Tastatur bedienbar ist. Insbesondere die Eingabefelder für Programme müssen per Mausklick aktiviert werden.
Im Bereich Register werden die Startwerte für Register eingegeben.
Mit dem "+"-Button wird ein neues Register hinzugefügt.
Mit dem "-"-Button wird das letzte Register gelöscht.
Mit dem "Null"-Button werden alle Register auf Null gesetzt.
Mit dem "Startwerte der letzten Initialisierung"-Button werden alle Register auf ihren Wert bei der letzten Initialisierung gesetzt.
Im Feld Programm wird das Programm der Registermaschine eingegeben (s. Definition).
Bitte beachten Sie: In manchen Browsern führt das Benutzen der "Rücktaste" selbst beim Eingeben von Programmen dazu, dass der Browser die vorherige Webseite aufruft. Sollte dies auf Ihren Browser zutreffen, können Sie statt der "Rücktaste" den Pfeil nach oben benutzen.
Im Bereich Unterprogramme werden Unterprogramme definiert (s. Definition).
Mit dem "+"-Button werden Eingabefelder für Unterprogramme erzeugt.
Mit den "Eingabefeld entfernen"-Buttons werden die jeweiligen Eingabefelder gelöscht.
In der Steuerung wählt man aus, wie man die Registermaschine ausführen möchte.
Entdeckt das Programm eine vermeintliche Endlosschleife durch den Aufruf von Unterprogrammen, wird das Programm pausiert und eine Warnung ausgegeben. Man kann das Programm mit den Steuerelementen weiterlaufen lassen, wenn man dies möchte.
Mit Einzelschritt geht man einen Schritt, d.h. eine Anwendung von Ai oder Si, vorwärts.
Mit automatische Schritte geht man automatisch Schritte weiter. Die Länge der Pause zwischen den Schritten kann auswählt werden.
Mit Ergebnis berechnen kann man das Programm bis zum Ende durchlaufen lassen, wobei es automatisch nach einer gewissen Schrittzahl anhält, um etwaige Endlosschleifen abzubrechen. Sollte es zu einem Abbruch kommen, kann man das Programm mit den Steuerelementen weiterlaufen lassen. Die Schrittzahl, nach der abgebrochen wird, kann ausgewählt werden.
Die Rechenschritte geben an, wie viele Aufrufe von Ai und Si bisher durchgeführt wurden.
Der Programmverlauf gibt den aktuellen Stand der Berechnung der Registermaschine an. Der aktuelle Schritt ist hellgrün hinterlegt. Bitte beachten Sie, dass der Rekursionskeller eben dies ist: ein Keller; d.h. das Programm liegt zuunterst und Aufrufe von Unterprogrammen werden darüber gelegt.
Im Bereich Optionen können Einstellungen zur Ausgabe vorgenommen werden.
Im Bereich Programme speichern und laden können Programme mit und ohne vordefinierte Unterprogramme ausgegeben und eingelesen werden.