Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:

Ähnliche Präsentationen


Präsentation zum Thema: "Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:"—  Präsentation transkript:

1 Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:
1. eine Konstante k vom Typ D ist ein Ausdruck vom Typ D 2. eine Variable v vom Typ D ist ist ein Ausdruck vom Typ D 3. sind t1, ..., tn Ausdrücke der Typen D1, ..., Dn und ist f:D1 x ... x Dn -> D eine Nicht-Infix-Operation, so ist f(t1,...,tn) ein Ausdruck vom Typ D 4. sind t1, t2 Ausdrücke der Typen D1, D2 und ist o:D1 x D2 -> D eine Infix-Operation, so ist (t1) o (t2) ein Ausdruck vom Typ D Wert eines Ausdrucks: 1. für eine Konstante k ist Wert(k) das durch k bezeichnete Element von D 2. für eine Variable v ist Wert(v) der in der Variablen gespeicherte Wert Wert(f(t1,...,tn)) = f(Wert(t1), ..., Wert(tn)) 4. Wert((t1) o (t2)) = Wert(t1) o Wert(t2)

2 Klammerung Vollständige Klammerung oft unnötig durch Festlegung der Bindungsstärke 1. einstellige Operatoren wie not, sin, cos, ... 2. multiplikative Operatoren wie *, /, div, mod, ... 3. additive Operatoren wie +, -, or, ... 4. vergleichende Operatoren wie =, <>, <, ... stärker schwächer Bei Operatoren gleicher Bindungsstärke wird Linksklammerung angenommen x div y * y + x mod y steht für ((x div y) * y) + (x mod y) + * mod div x y y x y Auswertungsbaum

3 Typkonversion bei zweistelligen Operatoren Operanden in der Regel vom selben Typ Ausnahmen: • Aufzählungstypen (Typverträglichkeit reicht, später) • REAL-INTEGER-Verträglichkeit: überall, wo REAL erlaubt ist, ist auch INTEGER erlaubt Bei gemischten Argumenten (etwa für div, mult) wird Konversion durchgeführt, Ergebnis stets REAL Beispiel: 2*8.0 1.0 <> 1 Wert: 19.0 16.0 TRUE Bemerkung: in allen Teilausdrücken nur ausführbare Operationen verwenden! Der Ausdruck (A = 0) or (B/A > 0) kann zu Laufzeitfehler führen, falls A=0.

4 Pascal Anweisungen strukturierte einfache Anweisung Anweisung Verbund-
With- Anweisung Zuweisung Prozedur- anweisung bedingte Anweisung wiederholdene Anweisung Goto- Anweisung While- Anweisung If- Anweisung Repeat- Anweisung Case- Anweisung For- Anweisung

5 Wertzuweisung Bezeichner := Ausdruck muß als Variable deklariert sein
Typ muß Variablen- typ entsprechen zu beachten: Wertzuweisung bewirkt Änderung des Zustands im Speicher Symbol “:=“ hat völlig andere Bedeutung als “=“ X := X + 1 bedeutet: nach Ausführung der Zuweisung ist Wert(X) = Wert (X) + 1, dabei ist Wert (X) der Wert von X vor Ausführung der Zuweisung X = X + 1 ist ein Ausdruck vom Typ BOOLEAN, der immer FALSE ist “:=“ wird gesprochen "ergibt sich aus" oder "wird zu" alt alt

6 Bedingte Anweisungen Anweisung IF Boolescher Ausdr. THEN ELSE
Soll Folge von Anweisungen ausgeführt werden, so ist Verwendung einer Verbundanweisung (BEGIN ... END Klammerung) erforderlich Mehrdeutigkeiten: IF B1 THEN IF B2 THEN A1 ELSE A2 1) IF B1 THEN [ IF B2 THEN A1 ELSE A2 ] oder 2) IF B1 THEN [ IF B2 THEN A1 ] ELSE A2 ? B1 True True False B2 True False True 1 A1 A2 - 2 A1 - A2 Pascal folgt Lesart 1: ELSE ergänzt immer letztes unergänztes IF Lesart 2 besser: IF B1 THEN BEGIN IF B2 THEN A1 END ELSE A2

7 Case-Anweisung CASE Ausdruck OF Fall END ELSE Anweisung
jeder Fall besteht aus Liste von Konstanten und Anweisung Semantik: CASE A OF k11, ..., k1j: S1; k21, ..., k2n: S2; ... km1, ..., kmi: Sm ELSE S END bedeutet dasselbe wie: IF A = k11 or ... or A = k1j THEN S1 ELSE IF A = k21 or ... or A = k2n THEN S2 ... ELSE IF A = km1 or ... or A = kmi THEN Sm ELSE S

8 Ein Programm mit Fallunterscheidungen
PROGRAM Case1; VAR Monat, Jahr, Tage: Integer; Schalt: Boolean; BEGIN Read(Monat, Jahr); IF Jahr mod 4 = 0 THEN IF Jahr mod 100 = 0 THEN IF Jahr mod 400 = 0 THEN Schalt := True ELSE Schalt := False ELSE Schalt := True ELSE Schalt:= False; CASE Monat OF 4, 6, 9, 11: Tage := 30; 2: IF Schalt THEN Tage := 29 ELSE Tage := 28 ELSE Tage := 31 END; WriteLn( Monat, ' . ', Jahr, ' > ', Tage ) END.

9 Schleifen boolescher Ausdruck WHILE DO Anweisung WHILE B DO A
bedeutet dasselbe wie: IF B THEN BEGIN A; WHILE B DO A END ; boolescher Ausdruck REPEAT Anweisung UNTIL REPEAT C UNTIL B entspricht: C; WHILE not B DO BEGIN C END

10 FOR-Schleife TO Bezeichner := FOR Ausdruck DOWNTO Ausdruck DO
Anweisung Bezeichner ist deklarierte Variable, so daß succ und pred definiert sind Anzahl der Schleifendurchläufe zu Beginn festgelegt: für jeden Wert zwischen dem ersten und dem zweiten Ausdruck einmal TO, DOWNTO geben an, ob inkrementiert oder dekrementiert wird Auf Laufvariable in der Schleife nur lesend zugreifen! Keine Annahmen über den Wert der Laufvariable nach Beendigung der Schleife machen! Beispiel: FOR Zeichen := 'a' TO 'z' DO WriteLn(Zeichen, ' ', Ord(Zeichen))

11 Bemerkungen FOR-Schleifen terminieren, da die Anzahl der Schleifendurchläufe feststeht WHILE und REPEAT können nichtterminierende Programme produzieren Terminierung oft schwierig zu beweisen: Beispiel Syrakusfunktion: Es ist unbewiesen, ob diese Schleife für alle n verlassen wird Strategie für Terminierungsbeweise: finde positiven Ausdruck, der bei jedem Schleifendurchlauf kleiner, aber nie negativ wird: bei ggT etwa: Wert von x + y nach jedem Schleifendurchlauf kleiner, aber nie negativ WHILE n <> 1 DO IF odd(n) THEN n := 3*n+1 ELSE n := n div 2

12 11. Unterprogrammtechnik
Unterprogramme sind in sich geschlossene Programmeinheiten, deren Ausführung durch ihren Namen veranlaßt wird Sie dienen insbesondere der Strukturierung größerer Programme 2 Arten: • Prozeduren: abstrahieren Anweisungsfolge zu neuer Anweisung • Funktionen: berechnen einen Wert eines bestimmten Typs Vorteile der Verwendung von Unterprogrammen: • größere Lesbarkeit und Überschaubarkeit von Programmen • geringerer Schreibaufwand bei wiederkehrenden Aktionsfolgen • geringere Fehleranfälligkeit • einfachere Änderungsmöglichkeit

13 Lokale und globale Variable
Unterprogramme können selbst Unterprogrammdeklarationen enthalten HP UP1 UP2 UP3 UP11 UP12 UP21 UP31 UP32 UP311 Schachtelungsbaum Sichtbarkeitsregel: Für ein Unterprogramm UP gelten alle Deklarationen aus allen Programmen (einschließlich UP und HP) auf dem Weg zu UP im Schachtelungsbaum Deklarationen in UP heißen lokal, solche in übergeordneten Programmen global für UP Bei Bezeichnungskollisionen gilt Deklaration des nächsten Unterprogramms

14 Prozeduren Der Aufruf einer Prozedur in einem Programm ist eine Anweisung Die in der Prozedur deklarierte Folge von Anweisungen wird abgearbeitet, anschließend wird ins aufrufende Programm zurückgesprungen Haupt programm Unter- programm UP1 BEGIN END; UP1;

15 Gültigkeitsbereich und Lebensdauer
Gültigkeitsbereich eines Bezeichners: der statische Teil des Programms, in dem dieser Bezeichner in exakt gleicher Bedeutung verwendet werden darf. Lebensdauer: bezeichnet die dynamische Existenz eines Objekts während des Programmablaufs. Der Gültigkeitsbereich bezieht sich auf den Bezeichner (durch Übersetzer kontrolliert), die Lebensdauer auf den zur Laufzeit belegten Speicherplatz. Durch Ausführung eines Unterprogramms P entsteht eine Inkarnation. Zur Inkarnation gehören dynamisch (bis Ende der Ausführung von P): • ein Ausführungspunkt (Zeiger auf gerade auszuführenden Befehl) • Speicherplätze für alle Bezeichner von Variablen und Wertparameter • Bezüge auf die konkreten Referenzparameter. Nur in der jüngsten Inkarnation wandert der Ausführungspunkt weiter. Die Lebensdauer einer Variablen ist identisch mit der Existenz der zugehörigen Prozedur-Inkarnation. Zu Beginn der Lebensdauer ist der Wert einer Variablen undefiniert.

16 Prozedurparameter formale Parameter: in der Deklaration eines Unterprogramms verwendet (Platzhalter für Werte) aktuelle Parameter: beim Prozeduraufruf verwendete Argumente Typen: • Eingabeparameter: Übermittlung von Werten an die Prozedur, call by value • Ausgabeparameter: Übermittlung von Resultaten an aufrufendes Programm, call by reference • Ein/Ausgabeparameter: Mischform, call by reference formale Par. aktuelle Par. Referenz- parameter Kennzeichnung durch VAR Variable entspre- chenden Typs Werte- parameter Ausdrücke entspre- chenden Typs ohne VAR

17 Beispiel Deklaration in aufrufendem Programm: VAR A, B, C, D: REAL;
PROCEDURE Beispiel (V, W: REAL; VAR X: REAL); BEGIN ... END; Deklaration in aufrufendem Programm: VAR A, B, C, D: REAL; korrekte Aufrufe: Beispiel(A, D, B); Beispiel(A-1, A - 2*B, D); inkorrekt: Beispiel(A, B, 1.0) Angabe des Typs formaler Parameter erforderlich, nur Typnamen, nicht Typdeklarationen erlaubt PROCEDURE xyz(A: 1..Maxint) verboten, da Typdefinition vorkommt korrekt: TYPE Pos = 1..Maxint; ... PROCEDURE xyz(A: Pos)

18 Methoden der Parameterübergabe
a) Call by value - Werte der aktuellen Parameter bei Unterprogrammaufruf an formale Parameter gebunden - formale Parameter lokal im aufgerufenen Programm - keine Information geht an das aufrufende Programm zurück b) Call by reference - Unterprogramm erhält bei Aufruf Zeiger auf Adresse des aktuellen Parameters - Alle Operationen werden im Speicherbereich des aufrufenden Programms ausgeführt - Veränderungen bleiben nach Beendigung des Unterprogramms sichtbar

19 c) Call by value-result
- Werte der aktuellen Parameter werden an formale Parameter gebunden - Berechnung verwendet formale Parameter lokal - Nach Prozedurende werden Werte der lokalen Parameter an aktuelle Parameter gebunden procedure p (x,y: integer); begin x := x + 1; y := y + 1; end a := 1; p (a,a); Call by reference: a = 3 Call by value-result: a = 2 (falls x  y, abhängig von der Reihenfolge des Rückkopierens)

20 d) Call by name - Bei Unterprogrammaufruf werden formale Parameter durch aktuelle Parameter textuell ersetzt - Bindung des formalen Parameters an Speicherplatz wird jeweils neu ermittelt - Zuweisungen an einen formalen Parameter können verschiedene Speicherplätze betreffen Beispiel: procedure swap(a, b: integer) var temp: integer; begin temp := a; a := b; b := temp; end. für a, b sei call by name vereinbart.

21 Aufruf: Swap (i, a[i]) bewirkt Ausführung von temp := i; i := a[i];
a[i] := temp; Seien vor dem Aufruf i = 3 und a[3] = 4, nach dem Aufruf gilt: i = 4 und a[4] =3 (a[3] bleibt unverändert) Bei call by refence dagegen passiert das Erwartete (i=4 und a[3] = 3).


Herunterladen ppt "Ausdrücke bezeichnen Elemente eines Datentyps induktive Definition:"

Ähnliche Präsentationen


Google-Anzeigen