Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von...

Post on 06-Apr-2015

103 views 0 download

Transcript of Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von...

Agenda für heute, 18. Mai, 2006

• Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren

• Strukturierung von Programmen: Units

• Datentypen: Ordinaltypen

• Datentypen: Aufzählungstypen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Pascal-Prozeduren

program tempumrechnung;

var

x, y: real;

begin {Hauptprogramm}

read (x);

fahrenheit;

write (y:5:2)

end.1/22

procedure fahrenheit;

begin

y:= (x - 32) * 5 / 9;

end; {fahrenheit}

Prozeduraufruf

Prozedurdeklaration

Was schreiben wir, wenn wir zur berechneten Temperatur 20 Grad dazu zählen müssen?

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Funktionsprozeduren

program tempumrechnung;

var

x, y: real;

begin {Hauptprogramm}

read (x);

y:= fahrenheit + 20;

write (y:5:2)

end.2/22

function fahrenheit: real;

begin

fahrenheit:= (x - 32) * 5 / 9;

end; {fahrenheit}

Funktionsname kann in Ausdrückenverwendet werden

Aber: für jeden Funktions-aufruf brauchen wir eine Variable x

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Datenübergabe mit Werte-Parameter

program tempumrechnung;

var

x, y: real;

begin {Hauptprogramm}

read (x);

y:= fahrenheit(x) + 20;

write (y:5:2)

end.3/22

Formeller Parameter

Aktueller Parameter

function fahrenheit(t: real): real;

begin

fahrenheit:= (t - 32) * 5 / 9;

end; {fahrenheit}

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Datenübergabe mit Var-Parameter

program tempumrechnung (input, output);

var

x: real;

begin {Hauptprogramm}

read (x);

fahrenheit(x);

write (x:5:2)

end.4/22

procedure fahrenheit(var t: real);

begin

fahrenheit:= (t - 32) * 5 / 9;

end; {fahrenheit}

Der Inhalt von x wird überschrieben!

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Lokalität: Sichtbarkeit von Bezeichnern

var a

procedure P

var b

procedure Q

procedure R

var b, c

Sichtbar bedeutet:

Auf eine Variable oder Konstante, die sichtbar ist, kann man zugreifen.

Eine Prozedur oder Funktion, die sicht-bar ist, kann man aufrufen.

Unsichtbare Elemente entziehen sich einem Zugriff

program H

5/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeitsbereich von Hauptprogramm H

var a

procedure P

a und P sichtbar

program H

Weil Prozeduren schachtelbar sind, sind auch Sichtbar-keitsbereiche schachtelbar

6/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeitsbereich von Prozedur P

var a

procedure P

var b

procedure Q

procedure R

a, b, Q, R und P sichtbar

program H

Globale Variable für die Prozeduren P, Q und R

Lokale Variable für die Prozedur P

7/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeitsbereich von Prozedur R

var a

procedure P

var b

procedure Q

procedure R

a, b, R, Q und P sichtbar

program H

8/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeitsbereich von Prozedur Q

var a

procedure P

var b

procedure Q

var b, c

b, c, a, Q und P sichtbar

program H

R (und seine lokalen Variablen) sind für Q nicht sichtbar!procedure R

9/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeitsbereich von Prozedur Q

var a

procedure P

var b

procedure Q

var b, c

b, c, a, Q, R und P sichtbar

program H

procedure R

procedure R; FORWARD;Die forward-Deklaration macht R (aber nicht seine lokalen Variablen) für Q sichtbar!

10/22

• Strukturierung von Programmen: Prozeduren

• Strukturierung von Programmen: UnitsStrukturierung von Programmen: Units

• Datentypen: Ordinaltypen

• Datentypen: Aufzählungstypen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Strukturierung von Programmen

1. Schritt: Gliederung des Quellcodes

Einem Programm können wir Struktur verleihen, indem wir es in

Prozeduren gliedern, von denen jede eine spezielle Aufgabe

innerhalb des Progamms übernimmt.

2. Schritt: Import von Objektcode

Die Struktur eines Programms können wir ergänzen, indem wir

bereits kompilierte Prozeduren in den Objektcode des

Programms importieren.

11/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Import von Objektcode aus einer "Unit"

program xyz;

uses math;

var alpha: integer; sinalpha: real;

begin { main }. . .read(alpha);sinalpha:= sin(alpha);write('Sinus von ',alpha,': ';. . .

Diese Anweisung sagtdem Compiler, dass allein der Unit "Math" dekla-rierten Prozeduren demProgramm zur Verfügungstehen sollen.

12/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Getrennte Kompilation von Programmen und Units

Programm

Quellcode

Unit A

Quellcode

Compiler

Unit A

Objektcode

Programm

Objektcode

Muss neu kompiliert werden,wenn das Programm oder eine der Units geändert wird.

Unit B

Quellcode

Unit B

Objektcode

Muss neu kompiliert werden,wenn die Unit geändert wird.

Üb

ers

chau

bar

keit

dur

ch M

odu

lari

sie

rung

(Pro

gram

mie

ren

im G

ross

en)

13/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeit bei Units

program X;uses A;

var R, S: integer;

begin R:= S + 1;

p1;

p2;

end.

unit A;

interfaceprocedure p1; procedure p2;

implementation

var j: real;

procedure p1;begin . . .end;

procedure p2;var k: real;begin k := k*j; . . .end;

end.14/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Sichtbarkeit bei Units

program X;uses A;

var R, S: integer;

begin R:= S + 1; j:= R - S; p2;

q3;

end.

unit A;

interfaceuses B; var j: real;procedure p2;

implementation

procedure p2;var k: real;begin

k := k*j; q1; . . .

end;end.

unit B;

interfaceprocedure q1procedure q2procedure q3;

implementation

procedure q1;begin

. . .end;

. . .

end.

kann via Unit A auch dieBezeichner im Interfacevon Unit B verwenden

15/22

• Strukturierung von Programmen: Prozeduren

• Strukturierung von Programmen: Units

• Datentypen: OrdinaltypenDatentypen: Ordinaltypen

• Datentypen: Aufzählungstypen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

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: bei Integer ist der Wert selbst die Ordinalzahl)

Auf jeden Wert von Ordinaltypen anwendbare Standardfunktionen:

Ord() gibt die Ordinalzahl zurück

Pred() gibt die Ordinalzahl des Vorgängers zurück

Succ() gibt die Ordinalzahl des Nachfolgers zurück

Low() gibt den kleinsten Wert des Wertebereichs zurück

High() gibt den grössten Wert des Wertebereichs zurück

16/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Standardfunktionen für Ordinaltypen

Beispiele

Ord(true) = 1

Ord('8') = 56

Ord(8) = 8

Pred(false) = true

Pred(-342) = –343

Succ('m') = n

Low(integer)= –2147483648

Low(word) = 0

High(word) = 65535

17/22

• Strukturierung von Programmen: Prozeduren

• Strukturierung von Programmen: Units

• Datentypen: Ordinaltypen

• Datentypen: AufzählungstypenDatentypen: Aufzählungstypen

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Aufzählungstypen

Ein Aufzählungstyp wird durch eine Liste von Werten definiert. Aufzählungstypen gehören zur Klasse der Ordinaltypen.

Einer Variablen von diesem Typ können diese und nur diese Werte zugewiesen werden.

Beispieletype Tag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag,

Samstag, Sonntag);

Beziehung = (Eltern, Geschwister, Nachkomme, Cousine);

Operator = (plus, minus, multipl, div);

Trigfunktion = (sinus, kosinus, tangens, kotangens);

Farbe = (braun, rot, orange, gelb, gruen); 

18/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Aufzählungstypen

Den Variablen, die als vom Typ Aufzählung deklariert sind, können die entsprechenden Werte wie Konstanten zugewiesen werden.

Beispiele

var Feiertag, Werktag: Tag; Verwandter: Beziehung; Laubfarbe: Farbe;

Die folgenden Anweisungen sind möglich:Feiertag:= Sonntag;Verwandter:= Nachkomme;

Laubfarbe:= gelb;

Diese jedoch nicht:Feiertag:= blau;Verwandter:= Freitag;

19/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Aufzählungstypen: Einschränkungen

Im selben Gültigkeitsbereich darf ein Wert nicht zu mehr als einem Aufzählungstyp gehören:

type Frucht = (Apfel, Orange, Zitrone, Tomate); Gemuese = (Kartoffel, Wirz, Tomate, Bohne);

var Karte1: (Eichel, Schelle, Rose, Schilte);var Karte2: (Eichel, Schelle, Rose, Schilte);

Dagegen werden die folgenden Zeilen fehlerfrei compiliert:

var Karte1, Karte2: (Eichel, Schelle, Rose, Schilte);

type Farbe = (Eichel, Schelle, Rose, Schilte);

var Karte1: Farbe; Karte2: Farbe;

20/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Aufzählungstypen: Operationen

Auf die Werte eines Aufzählungstyps können Vergleichsoperatoren und die Standardfunktionen ord, succ und pred angewandt werden:

Kartoffel < Bohne (= true)

ord(Orange) (= 1)

succ(Kartoffel) (= Wirz)

pred(Zitrone) (= Orange)

21/22

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Aufzählungstypen: Operationen

Variablen vom Typ Aufzählung können inkrementiert werden.

var

Wochentag: (Montag, Dienstag, Mittwoch, Donnerstag,

Freitag, Samstag, Sonntag);

Nach den Anweisungen:

Wochentag:= Dienstag;inc(Wochentag);

enthält Wochentag den Wert Mittwoch

Die for-Anweisung wird oft zusammen mit Aufzählungstypen benützt.

Beispiel

for Wochentag:= Montag to Freitag do . . .

22/22