agenda für heute, 18. mai, 2006 strukturierung von programmen: prozedurenstrukturierung von...
TRANSCRIPT
![Page 1: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/1.jpg)
Agenda für heute, 18. Mai, 2006
• Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren
• Strukturierung von Programmen: Units
• Datentypen: Ordinaltypen
• Datentypen: Aufzählungstypen
![Page 2: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/2.jpg)
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?
![Page 3: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/3.jpg)
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
![Page 4: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/4.jpg)
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}
![Page 5: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/5.jpg)
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!
![Page 6: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/6.jpg)
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
![Page 7: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/7.jpg)
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
![Page 8: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/8.jpg)
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
![Page 9: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/9.jpg)
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
![Page 10: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/10.jpg)
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
![Page 11: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/11.jpg)
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
![Page 12: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/12.jpg)
• Strukturierung von Programmen: Prozeduren
• Strukturierung von Programmen: UnitsStrukturierung von Programmen: Units
• Datentypen: Ordinaltypen
• Datentypen: Aufzählungstypen
![Page 13: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/13.jpg)
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
![Page 14: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/14.jpg)
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
![Page 15: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/15.jpg)
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
![Page 16: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/16.jpg)
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
![Page 17: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/17.jpg)
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
![Page 18: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/18.jpg)
• Strukturierung von Programmen: Prozeduren
• Strukturierung von Programmen: Units
• Datentypen: OrdinaltypenDatentypen: Ordinaltypen
• Datentypen: Aufzählungstypen
![Page 19: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/19.jpg)
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
![Page 20: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/20.jpg)
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
![Page 21: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/21.jpg)
• Strukturierung von Programmen: Prozeduren
• Strukturierung von Programmen: Units
• Datentypen: Ordinaltypen
• Datentypen: AufzählungstypenDatentypen: Aufzählungstypen
![Page 22: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/22.jpg)
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
![Page 23: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/23.jpg)
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
![Page 24: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/24.jpg)
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
![Page 25: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/25.jpg)
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
![Page 26: Agenda für heute, 18. Mai, 2006 Strukturierung von Programmen: ProzedurenStrukturierung von Programmen: Prozeduren Strukturierung von Programmen: Units](https://reader036.vdocuments.net/reader036/viewer/2022062623/55204d8049795902118d1f0d/html5/thumbnails/26.jpg)
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