GEHNIO
Gesamtschule Duisburg-Hamborn/Neumühl
Informatik in der Oberstufe

> 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:
    A := B + C;
    H := H + 1

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

 

 

 

 

 

 

 

 

 
  © 2002 Gesamtschule Duisburg-Hamborn/Neumühl.  
Hosted by www.Geocities.ws

1