home *** CD-ROM | disk | FTP | other *** search
- while Interpreter von:
- ^^^^^^^^^^^^^^^^^^^^^^
-
- Dieter Seidel
- Einsteinstr. 19
-
- 7410 Reutlingen
-
- West Germany Datum: 24.07.1992
-
-
- Copyright:
- ^^^^^^^^^^
-
- Das hier veröffentlichten Programme und die dazugehörigen Modula-2 Source
- Codes sind PD-Freeware, unterliegen damit dem Copyright von Dieter
- Seidel. Sie dürfen also jederzeit kopiert werden und weitergegeben werden.
- Die Benutzung und Weitergabe bezieht sich aber nur für nicht-kommerzielle
- (also Schüler/Studenten, Hobby usw.), wird für das Kopieren mehr als
- 5,--DM verlangt ist das kommerziell, Zwecke.
- Desweiteren untersage ich jedwede Veröffentlichung
- der !veränderten! Modula-2 Source Codes bzw. Programme.
- Sollen diese Programme in andere Serien ausser AMOK und Fred Fish
- aufgenommen werden, wird meine schriftliche Einverständniserklärung
- benötigt.
-
-
- Hardware-Voraussetzungen:
- ^^^^^^^^^^^^^^^^^^^^^^^^^
-
- Der Interpreter läuft auf allen Amiga's. Der Start sollte jedoch vom CLI
- erfolgen. Ich habe jedoch ein Script eingerichtet, so das das Programm
- auch von der Workbench aufgerufen werden kann. Hierzu wird jedoch IconX
- im C: Ordner verlangt.
-
-
- Entwicklung:
- ^^^^^^^^^^^^
-
- Dieses Programm entstand nach einer Übungs-aufgabe im WS 91/92 der
- Universität Karlsruhe im Fach Informatik III.
- Nachdem ich 99.9% des Programmes in diesem Semester fertiggestellt habe,
- benötigte ich ersteinmal ein halbes Jahr um mich damit wieder zu
- beschäftigen. Ich habe gestern nur einen Fehler in den Unterprogramm
- Routinen U3 und U4 entfernt und das ganze nocheinmal getestet.
- Eigentlich wollte ich noch einiges mehr einbauen, was mir jetzt
- allerdings zu viel ist. Damit ist die Arbeit an diesem Programm
- für mich beendet.
-
-
- Der Interpreter:
- ^^^^^^^^^^^^^^^^
-
- Die Syntax von while-Programmen lehnt sich sehr stark an die Syntax von
- Pascal-Programmen an. Damit dürfte es kein Problem sein eigene Programme
- dafür zu entwickeln.
- Für Nicht-Informatiker: Ein while-Programm entspricht in etwa einer
- Turing Maschine. Nicht mehr und nicht weniger.
- Damit ist es ziemlich sinnlos größere Programme
- damit schreiben zu wollen.
- Es stehen nur while Schleifen und Zuweisungen zur
- Verfügung.
-
- Es existieren folgende Befehle (in Klammern die Abkürzungen für die
- Programmeingabe) :
-
- begin [b]
- end [e]
- while x1 # x2 do [wx1#x2d] ; Schleife
- := [:] ; Zuweisung
- succ [s] ; Nachfolger x:=x+1
- pred [p] ; Vorgänger x:=x-1
- Xn [Xn] ; Variable X mit einer beliebigen Zahl n
- ; Z.B.: X0, X1, X123 ...
-
- Achtung: Es stehen nur die Variablen X0, X1, ... X99 zur Verfügung.
- Diese sind, entsprechend der Definition von while Programmen,
- als CARDINAL definiert.
-
- Nach der Eingabe des Programmes mit Hilfe der in den eckigen Klammern
- stehenden Abkürzungen, wird die Quadrupeldarstellung des Programmes
- berechnet und das Programm nochmals ausgegeben.
-
- Dabei besteht ein Quadrupel aus:
-
- 1. Die Zeilennummer. Jeder Befehl hat seine eigene, beginnend bei 1 und
- fortlaufend numeriert. Die Anweisungen `begin' und `end' bekommen
- keine Zeilennummern.
- 2. Die Anweisung in Kurzform.
- 3. Die Zeilennummer die als nächstes auszuführen ist. Bei einer
- while Schleife ist es die nächste Zeile.
- Bei einer Zuweisung ist es entweder die Abfrage einer while Schleife
- oder die nächste Zeile.
- 4. Die Zeilennummer die als nächstes auszuführen ist, falls ein
- while Konstrukt zu einem FALSE geführt hat. Siehe auch Punkt 3.
-
- Falls bis jetzt kein Fehler aufgetreten ist, wird der Interpreter
- aufgerufen.
-
- Die Fragen die hier gestellt werden, sollten selbsterklärend sein, bis
- auf die letzte.
-
- Ich habe die while Syntax so erweitert, daß es möglich ist vordefinierte
- Unterprogramme aufzurufen. Diese sind Addition, Subtraktion,
- Multiplikation, Division und Rest der Division.
- Dabei wird einfach U1, U2, ... U5 für das entsprechende Unterprogramm
- eingegeben. Die Variablen X0, X1, ... X9 werden für die Funktionswerte
- benötigt.
-
-
- Beispiel:
- ^^^^^^^^^
-
- Schreiben Sie ein while Programm, das X1:=MAXIMUM(X2,X3,X4) berechnet.
-
- X2, X3 und X4 sind die Eingabevariablen, X1 die Ausgabevariable.
-
- Testen Sie dieses Programm für X2:=2, X3:=4 und X4:=3.
-
- Und dies ist die Lösung die man so eingeben sollte. Die Besitzer von OS 2.0
- können das folgende Programm einfach mit der Maus ausschneiden.
- Allen anderen wünsche ich viel Spaß beim abtippen.
-
- bx1:0;x2:2;x3:4;x4:3;x5:0;
- wx2#x5dbx1:s(x1);x2:p(x2);x3:p(x3);x4:p(x4)e;
- wx3#x5dbx1:s(x1);x3:p(x3);x4:p(x4)e;
- wx4#x5dbx1:s(x1);x4:p(x4)e
- e
-
- Der Interpreter erzeugt dann:
-
- ( 1;X1:0 ; 2; 2) X1:=0;
- ( 2;X2:2 ; 3; 3) X2:=2;
- ( 3;X3:4 ; 4; 4) X3:=4;
- ( 4;X4:3 ; 5; 5) X4:=3;
- ( 5;X5:0 ; 6; 6) X5:=0;
- ( 6;X2#X5 ; 7;11) while X2 # X5 do
- begin
- ( 7;X1:s(X1) ; 8; 8) X1:=succ(X1);
- ( 8;X2:p(X2) ; 9; 9) X2:=pred(X2);
- ( 9;X3:p(X3) ;10;10) X3:=pred(X3);
- (10;X4:p(X4) ; 6; 6) X4:=pred(X4)
- end;
- (11;X3#X5 ;12;15) while X3 # X5 do
- begin
- (12;X1:s(X1) ;13;13) X1:=succ(X1);
- (13;X3:p(X3) ;14;14) X3:=pred(X3);
- (14;X4:p(X4) ;11;11) X4:=pred(X4)
- end;
- (15;X4#X5 ;16;18) while X4 # X5 do
- begin
- (16;X1:s(X1) ;17;17) X1:=succ(X1);
- (17;X4:p(X4) ;15;15) X4:=pred(X4)
- end
- end
-
-
- Beispiel:
- ^^^^^^^^^
-
- Schreiben Sie ein Programm, das die Summe von X1 = 7 und X2 = 3 berechnet.
-
- Lösung:
-
- bX1:7X2:3U1e
-
- Hier benutze ich ein Unterprogramm, welches normalerweise nicht erlaubt
- ist.
-
-