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