> Home
> Algorithmen
> Datenstrukturen
> Maschinenmodelle
> Probleme
> Themen
> Mindmaps
> Aufgaben
> Programmierung
> Facharbeit
> Abitur
> Projekte
> Informatik-AG
> News
> Impressum
> email
|
|
RePas - reduziertes Pascal
In diesem Papier wir ein reduziertes Pascal - genannt RePas - beschrieben.
Diese Einschr�nkung der Programmiersprache Pascal hat zum Ziel, die
Programmierenden schon einmal an den Programmierstil der Assemblerprogrammierung
und die dabei typischen Adressierungsarten vorzubereiten.
1. Programmstruktur
RePas kennt die von Pascal bekannte Programmstruktur:
program name;
label [Labelliste]
const [deklaration von Variablen]
begin
[Anweisung]
end.
Dabei ist allerdings schon an dieser Stelle zu bemerken, dass die Konstanten und Variablen nur vom Datentyp
integer sein dürfen.
2. Erlaubte Anweisungstypen
Die erlaubten Anweisungstypen sind:
- Zuweisungen in Zwei-Adress-Form
- Eingabeanweisungen (readln(x);)
- Ausgabeanweisungen (writeln(x);)
- unbedingter Sprung mit goto,
- bedingter Sprung
3. Adressenkonzept
Wir gehen davon aus, dass für eine RePas-Variable ein Spiecherplatz reserviert wird, dem eine bestimmte Adresse im Spiecher zugeordnet ist.
Der Rechner kann also Zugriff auf den Wert einer solchen Variablen bekommen,
indem er auf den Speicher an der Stelle zugreift, die der Adresse der Variablen
entspricht.
3.1 Einadressform
Die Einadressform ist in RePas nicht realisierbar. Bei der Einadressform
wird nur eine Adresse und eine Operation angegeben. Die Operation sorgt
dann für eine Verknüpfung mit weiteren - meist besonders dafür
eingerichten - Speicherstellen Adressen).
3.2 Zweiadressform
Ausdrücke in Zweiadressform erhalten maximal zwei Adressen. Es sind also
z.B. Ausdrücke der Form:
H := H + X;
A := A + B;
H := H + 1;
erlaubt.
3.3 Dreiadressform
Ausdrücke in Dreiadressform enhalten drei Adressen. Es sind also z.B.
Ausdrücke der Form:
erlaubt.
4 Gegenüberstellung Pascal contra RePas
PASCAL |
RePas |
Bemerkungen |
Alle einfachen Datentypen wie z.B.
integer, real, string, char usw. sind erlaubt |
nur der Datentyp integer ist erlaubt |
keine |
TYPE, CONST, VAR |
nur COST, VAR |
keine |
Alle strukturierten Datentypen
z.B. RECORD, ARRAY usw. |
nur ARRAY [0..N]
OF INTEGER |
keine |
Ausdrücke
alle arthmetischen Ausdrücke
Logische Ausdrücke, Vergleiche |
Zweiadressform
Nur maximal ein Operator oder Funktionsaufruf erlaubt
nur vergleich mit 0 erlaubt. |
z.B. h :=h + 3; oder h.=h + x;
aber nicht h := a+ b; |
alle Operatoren |
nur die Operatoren +, -, *, DIV,
=, <>, <, <=, >, >= |
mod |
Anweisungen
alle PASCAL-Anweisungen
alle Schleifen
bedingte Anweisungen
(IF-THEN-ELSE)
Fallunterscheidungen (CASE)
|
nur Wertzuweisung:=
und Prozedureaufrufe
nur sprünge mit GOTO (marke)
nur IF (Bedingung) THEN GOTO (Marke)
s.o.
|
Achtung! Für den GOTO-Befehl müssen im Program sogennante
Labels (Marken, Sprungmarken) deklariert werden.
Dies geschieht mit dem Schlüsselwort LABEL.
PROGRAM RePAS_Beispiel;
LABEL M1,M2,M3,M4;
VAR i: integer;
BEGIN
M1: Read (i);
M2: IF i<=0 THEN GOTO M4;
M3: i:= i - 1;
M4: Write (i);
END. |
5 Übersetztungsschablonen für RePAS
Höhere Sprachkonstrukte in PASKAL werden mit Hilfe der folgenden Übersetztungsschablonen in RePAS übersetzt.
PASKAL |
RePAS |
Deklaration |
Label-Deklaration ist wichtig! |
alle Variablennamen |
nur einfache bezeichnernamen wie: A,B,C,A1,A2,H1,H2 usw.
Bitte Großbuchstaben verwenden! |
alle Ein- und Ausgaben |
nur READ( ) und WRITE ( ) |
alle Ausdrücke |
nur Zuweisungen der Form A:= A (operator) B |
Vergleiche:
a = b
a < b
a > b
a <> b, a <= b, a >= b |
zunächst zuweisung
C := A; dann Subtraktion
C:= C - B;
dann "Null-Vergleich" mit C=0, C<0, C>0 usw. |
IF..THEN-Verzweigung
IF (B) THEN (A)
|
IF NOT (B) THEN GOTO M
(A);
M:
|
IF..THEN..ELSE-Verzweigung
IF (B)
THEN (A1)
ELSE (A2)
|
IF NOT (B) THEN GOTO M2
(A1);
GOTO M1;
M2: (A2);
M1:... |
WHILE..DO-Schleife
WHILE (B) DO (A)
|
M1: IF NOT (B) THEN GOTO M2
(A);
GOTO M1;
M2:...usw.. |
REPEAT..UNTIL-Schleife
REPEAT (A) UNTIL (B) |
M: (A);
IF NOT (B) THEN GOTO M; |
FOR..TO..DO-Schleife
Seien i,a,z vom Typ INTEGER
FOR i:=a TO z DO (A)
|
k:= a;
WHILE k<= z DO
BEGIN
(A)
k:= k + 1;
END; |
Aufgaben
Übersetzen Sie die Zuweisungen
- a:= (b+c)*(c-d)*(a+b).
-
- x:= -(2*a-b)
in Re PAS-Anweisungsfolgen.
Benutzen Sie dabei so viele Hilfsvariablen h1, h2, usw. wie Sie benötigen.
Übersetzen Sie die folgenden PASCAL-Programme in äquivalente RePAS-Programme:
PROGRAM Summe_der_eingegebenen_zahlen;
VAR zahl, summe: integer;
BEGIN
summe :=0;
REPEAT
Write ('Bitte eine Zahl oder 0 eingeben:');
Readln (zahl);
summe :=summe + zahl;
UNTIL zahl = 0;
Writeln ('Die Summe beträgt:',summe);
END.
PROGRAM Maximum;
VAR a,b,c : integer;
BEGIN
Write ('Bitte 1.Zahl eingeben:');
Readln(a);
IF a>b THEN c:=a
ELSE c:=b;
Writeln('Maximum:',c);
END;
Zusammengestellt von: Adrian Scharla
|
|