Anweisung For

Werbung
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
3.
Wert(f(t1,...,tn)) = f(Wert(t1), ..., Wert(tn))
4. Wert((t1) o (t2)) = Wert(t1) o Wert(t2)
G.Heyer
1
Digitale Informationsverarbeitung
Klammerung
Vollständige Klammerung oft unnötig durch Festlegung der Bindungsstärke
stärker
schwächer
1. einstellige Operatoren wie not, sin, cos, ...
2. multiplikative Operatoren wie *, /, div, mod, ...
3. additive Operatoren wie +, -, or, ...
4. vergleichende Operatoren wie =, <>, <, ...
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
G.Heyer
2
Digitale Informationsverarbeitung
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: Wert:
17.0 + 2
2*8.0
1.0 <> 1
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.
G.Heyer
3
Digitale Informationsverarbeitung
Pascal Anweisungen
strukturierte
Anweisung
einfache
Anweisung
VerbundAnweisung
Zuweisung
Prozeduranweisung
bedingte
Anweisung
GotoAnweisung
wiederholdene
Anweisung
WhileAnweisung
IfAnweisung
CaseAnweisung
G.Heyer
WithAnweisung
4
RepeatAnweisung
ForAnweisung
Digitale Informationsverarbeitung
Wertzuweisung
Bezeichner
:=
muß als Variable
deklariert sein
Ausdruck
Typ muß Variablentyp 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 alt (X) + 1,
dabei ist Wert alt (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"
G.Heyer
5
Digitale Informationsverarbeitung
Bedingte Anweisungen
IF
Boolescher Ausdr.
THEN
Anweisung
ELSE
Anweisung
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
False
B2
True
False
True
False
1
A1
A2
-
2
A1
A2
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
G.Heyer
6
Digitale Informationsverarbeitung
Case-Anweisung
CASE
Ausdruck
OF
Fall
ELSE
Anweisung
END
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
G.Heyer
7
Digitale Informationsverarbeitung
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.
G.Heyer
8
Digitale Informationsverarbeitung
Schleifen
boolescher
Ausdruck
WHILE
DO
Anweisung
WHILE B DO A
bedeutet dasselbe wie:
IF B THEN BEGIN A; WHILE B DO A END
;
REPEAT
Anweisung
UNTIL
boolescher
Ausdruck
REPEAT C UNTIL B
entspricht:
C; WHILE not B DO BEGIN C END
G.Heyer
9
Digitale Informationsverarbeitung
FOR-Schleife
TO
FOR
Bezeichner
:=
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))
G.Heyer
10
Digitale Informationsverarbeitung
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:
WHILE n <> 1 DO
IF odd(n) THEN n := 3*n+1 ELSE n := n div 2
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
G.Heyer
11
Digitale Informationsverarbeitung
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
G.Heyer
12
Digitale Informationsverarbeitung
Lokale und globale Variable
Unterprogramme können selbst Unterprogrammdeklarationen enthalten
HP
UP1
UP11
UP2
UP12
UP21
UP3
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
G.Heyer
13
Digitale Informationsverarbeitung
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
Unterprogramm
UP1
BEGIN
•
•
•
END;
•
•
•
UP1;
•
•
•
G.Heyer
14
Digitale Informationsverarbeitung
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.
G.Heyer
15
Digitale Informationsverarbeitung
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
G.Heyer
formale Par.
aktuelle Par.
Referenzparameter
Kennzeichnung
durch VAR
Variable entsprechenden Typs
Werteparameter
ohne VAR
Ausdrücke entsprechenden Typs
16
Digitale Informationsverarbeitung
Beispiel
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)
G.Heyer
17
Digitale Informationsverarbeitung
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
G.Heyer
18
Digitale Informationsverarbeitung
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
begin
a := 1;
p (a,a);
end
Call by reference:
Call by value-result:
G.Heyer
a=3
a = 2 (falls x  y, abhängig von der Reihenfolge
des Rückkopierens)
19
Digitale Informationsverarbeitung
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.
G.Heyer
20
Digitale Informationsverarbeitung
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).
G.Heyer
21
Digitale Informationsverarbeitung
Herunterladen