Document

Werbung
Agenda für heute, 12. Mai, 2005
• Prozeduren
• Funktionsprozeduren
• Prozedurparameter
• Lokale und globale Variablen
• Datentypen: Ordinaltypen
Rezept als Programm mit Prozeduren
Programmieren und Problemlösen
2/18
© Institut für Computational Science, ETH Zürich
Prozeduren
• Eine Prozedur ist ein kleines Programm, das innerhalb eines
anderen Programms steht.
• Prozeduren werden eingesetzt um:
a) Grosse Programme in kleinere Teile aufzuteilen
b) Mehrfach verwendete Codesegmente nur einmal
schreiben zu müssen
Programmieren und Problemlösen
3/18
© Institut für Computational Science, ETH Zürich
Pascal-Prozeduren
program tempumrechnung (input, output);
var
x, y: real;
procedure fahrenheit;
begin
Prozedurdeklaration
y:= (x - 32) * 5 / 9;
end; {fahrenheit}
begin {Hauptprogramm}
read (x);
Prozeduraufruf
fahrenheit;
write (y:5:2)
end.
Programmieren und Problemlösen
4/18
© Institut für Computational Science, ETH Zürich
Programmablauf bei Prozeduraufrufen
procedure P;
begin
...
end;
begin { Hauptprogramm }
P
P
end. { Hauptprogramm }
Programmieren und Problemlösen
5/18
© Institut für Computational Science, ETH Zürich
• Prozeduren
• Funktionsprozeduren
• Prozedurparameter
• Lokale und globale Variablen
• Datentypen: Ordinaltypen
Funktionsprozeduren
program tempumrechnung (input, output);
var
x, y: real;
function fahrenheit: real;
begin
fahrenheit:= (x - 32) * 5 / 9;
end; {fahrenheit}
begin {Hauptprogramm}
read (x);
y:= fahrenheit;
Funktionsname kann in Ausdrücken
verwendet werden
write (y:5:2)
end.
Programmieren und Problemlösen
6/18
© Institut für Computational Science, ETH Zürich
• Prozeduren
• Funktionsprozeduren
• Prozedurparameter
• Lokale und globale Variablen
• Datentypen: Ordinaltypen
Datenübergabe mit Werte-Parameter
program tempumrechnung (input, output);
var
Formeller Parameter
x, y: real;
function fahrenheit(t: real): real;
begin
fahrenheit:= (t - 32) * 5 / 9;
end; {fahrenheit}
begin {Hauptprogramm}
Aktueller Parameter
read (x);
y:= fahrenheit(x);
write (y:5:2)
end.
Programmieren und Problemlösen
7/18
© Institut für Computational Science, ETH Zürich
Datenübergabe mit Var-Parameter
program tempumrechnung (input, output);
var
x: real;
procedure fahrenheit(var t: real): real;
begin
fahrenheit:= (t - 32) * 5 / 9;
end; {fahrenheit}
begin {Hauptprogramm}
read (x);
fahrenheit(x);
write (x:5:2)
end.
Programmieren und Problemlösen
8/18
© Institut für Computational Science, ETH Zürich
Syntax von Prozeduren
Prozedurdeklaration
procedure
Bezeichner
;
Parameterliste
Block
;
Parameterliste
(
var
:
Bezeichner
Typ
)
,
;
Prozeduraufruf
Bezeichner
(
Ausdruck
)
,
Programmieren und Problemlösen
9/18
© Institut für Computational Science, ETH Zürich
• Prozeduren
• Funktionsprozeduren
• Prozedurparameter
• Lokale und globale Variablen
• Datentypen: Ordinaltypen
Lokalität: Sichtbarkeit von Bezeichnern
program H
var a
Sichtbar bedeutet:
procedure P
Auf eine Variable
oder Konstante, die
sichtbar ist, kann
man zugreifen.
var b
procedure Q
var b, c
b, c, a, Q und P sichtbar
procedure R
a, b, R, Q und P sichtbar
a, b, Q, R und P sichtbar
Eine Prozedur oder
Funktion, die sichtbar ist, kann man
aufrufen.
Unsichtbare
Elemente entziehen
sich einem Zugriff
a und P sichtbar
Programmieren und Problemlösen
10/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsbereich von Hauptprogramm H
program H
var a
Weil Prozeduren
schachtelbar sind,
sind auch Sichtbarkeitsbereiche
schachtelbar
procedure P
a und P sichtbar
Programmieren und Problemlösen
11/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsbereich von Prozedur P
program H
var a
Globale Variable für die
Prozeduren P, Q und R
procedure P
var b
procedure Q
Lokale Variable für die
Prozedur P
procedure R
a, b, Q, R und P sichtbar
Programmieren und Problemlösen
12/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsbereich von Prozedur R
program H
var a
procedure P
var b
procedure Q
procedure R
a, b, R, Q und P sichtbar
Programmieren und Problemlösen
13/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsbereich von Prozedur Q
program H
var a
procedure P
var b
procedure Q
var b, c
b, c, a, Q und P sichtbar
R (und seine lokalen
Variablen) sind für Q
nicht sichtbar!
procedure R
Programmieren und Problemlösen
14/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsbereich von Prozedur Q
program H
var a
procedure P
var b
procedure R; FORWARD;
procedure Q
Die forward-Deklaration
macht R (aber nicht
seine lokalen Variablen)
für Q sichtbar!
var b, c
b, c, a, Q, R und P sichtbar
procedure R
Programmieren und Problemlösen
15/18
© Institut für Computational Science, ETH Zürich
Sichtbarkeitsregeln für Prozeduren
1. Ein Bezeichner ist innerhalb der Prozedur in der er deklariert wird
sichtbar.
Ebenso ist er in allen von dieser Prozedur eingeschlossenen
Prozeduren sichtbar, vorbehaltlich Regel 2.
2. Wenn ein in der Prozedur P deklarierter Name N in einer inneren,
von P eingeschlossenen Prozedur Q, umdeklariert wird, dann
sind die Prozedur Q und alle weiteren, in Q eingeschlossenen
Prozeduren, aus dem Sichtbarkeitsbereich des in P deklarierten
Namens N ausgeschlossen.
3. Die Standarbezeichner von Pascal werden als bereits deklariert
angesehen, und zwar in einer imaginären, das Programm
umschliessenden, Prozedur.
Programmieren und Problemlösen
16/18
© Institut für Computational Science, ETH Zürich
• Prozeduren
• Funktionsprozeduren
• Prozedurparameter
• Lokale und globale Variablen
• Datentypen: Ordinaltypen
Ordinaltypen
Die Werte von Ordinaltypen stammen aus einem abzählbaren
Wertebereich. Dazu gehören die folgenden einfachen Datentypen:
Integer, Cardinal, Boolean, Char
Ihre Werte bilden eine geordnete Menge. Jedem Wert ist eine
Ordinalzahl zugeordnet: 0, 1, 2, . . .
(Ausnahme: Integer)
Auf jeden Wert von Ordinaltypen anwendbare Standardfunktionen:
Ord()
Pred()
Succ()
Low()
High()
gibt die Ordinalzahl zurück
gibt die Ordinalzahl des Vorgängers zurück
gibt die Ordinalzahl des Nachfolgers zurück
gibt den kleinsten Wert des Wertebereichs zurück
gibt den grössten Wert des Wertebereichs zurück
Programmieren und Problemlösen
17/18
© Institut für Computational Science, ETH Zürich
Standardfunktionen für Ordinaltypen
Beispiele
Ord(true)
=
Ord('8')
=
Ord(8)
=
Pred(false) =
Pred(-342) =
Succ('m')
=
Low(integer)=
Low(word)
=
High(word) =
Programmieren und Problemlösen
1
56
8
true
–343
n
–2147483648
0
65535
18/18
© Institut für Computational Science, ETH Zürich
Herunterladen