Table Of ContentThomas Ottmann/Peter Widmayer
Programmierung mit PASCAL
Programmierung
mit PASCAL
Von Prof. Dr. rer. nat. Thomas Ottmann
Universität Freiburg
und Prof. Dr. rer. pol. Peter Widmayer
Eidg. Technische Hochschule Zürich
6. Auflage
EI3
B. G. Teubner Stuttgart 1995
Prof. Dr. rer. nat. Thomas Ottmann
Geboren 1943 in Magdeburg. Studium der Mathematik, Physik und Mathematischen
Logik in Münster; 1969 Lehramtsprüfung in Mathematik, 1971 Promotion in Mathema
tischer Logik bei D. Rödding und Lehramtsprüfung in Physik. Von 1969 bis 1973 wiss.
Assistent am Institut für MathematIsche Logik der Universität Münster. Von 1973 bis
1975 wiss. Assistent am Institut für Angewandte Informatik und Formale Beschrei
bungsverfahren der Universität Karlsruhe. 1975 Habilitation im Fach Informatik. 1976
Wissenschaftlicher Rat und Professur. Von 1980 bis 1987 Inhaber des Lehrstuhls für
Angewandte Informatik an der Universität Karlsruhe. Seit Oktober 1987 Inhaber eines
Lehrstuhls für Informatik an der Universität Freiburg.
Prof. Dr. rer. pol. Peter Widmayer
Geboren 1953 in Sindelfingen. Studium des Wirtschaftsingenieurwesens an der Uni
versität Karlsruhe; 1979 Diplom in Wirtschaftsingenieurwesen; 1983 Promotion bei
Th. Ottmann. Von 1979 bis 1983 wiss. Mitarbeiter am Institut für Angewandte Infor
matIk und Formale Beschreibungsverfahren der Universität Karlsruhe. Von 1983 bis
1984 Gastwissenschaftler am IBM T. J. Watson Research Center. Von 1984 bis 1988
Hochschulassistent am Institut für Angewandte Informatik und Formale Beschrei
bungsverfahren der Universität Karlsruhe; 1986 Habilitation im Fach Angewandte Infor
matik, 1988 Inhaber eines Lehrstuhls für Informatik an der UnIversität Freiburg. Seit
1992 Professor an der Eidg. Technischen Hochschule Zürich.
Die Deutsche Bibliothek - CIP-Einheitsaufnahme
Ottmann. Thomas:
Programmierung mit PASCAL / von Thomas Ottmann und
Peter Widmayer. - 6. Aufl. - Stuttgart : Teubner, 1995
NE: Widmayer, Peter:
ISBN 978-3-519-12282-1 ISBN 978-3-322-99367-0 (eBook)
DOI 10.1007/978-3-322-99367-0
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwer
tung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimfllung
des Verlages unzulässig und strafbar. Das gilt besonders für Vervielfältigungen, Uber
setzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektroni
schen Systemen.
© B. G. Teubner Stuttgart 1986
Vorwort
Die Programmiersprache Pascal ist inzwischen zur bevorzugten Sprache für die
Einführung in das Programmieren an Universitäten geworden. Das ist natürlich kein
Zufall, sondern eine Folge der Überzeugung, daß diese Sprache durch ihre klare und
verhältnismäßig einfache Struktur das Programmieren als systematische Disziplin sehr
gut unterstützt und damit eine positiv prägende Auswirkung auf das für die gesamte
Informatik wichtige algorithmische Denken besitzt.
Dieses Skript ist hervorgegangen aus Kursen an der Universität Karlsruhe für künftige
Diplom-Wirtschaftsingenieure. Die dabei gesammelten Erfahrungen haben ihren Nie
derschlag in diesem Buch gefunden. Es hat sich gezeigt, daß eine der Struktur der
Sprache entsprechende systematische Darstellung der syntaktischen und semantischen
"Features" zwar für einen erfahrenen Programmierer, der bereits andere Programmier
sprachen kennt, die beste Einführung, für einen Anfänger aber unverdaulich ist. Wir
haben daher versucht, eine Einführung in das Programmieren mit Pascal zu geben,
die auch für Anfänger ohne Informatikkenntnisse verständlich ist. Das Programmieren
in jeder Sprache verlangt ein dem Anfä.nger völlig ungewohntes Maß an Abstraktion
und formaler Präzision. Es genügt aber unserer Erfahrung nach keineswegs, nur den
mit dem Programmieren verbundenen Formalisierungsprozeß zu erklären. Eine ge
naue Formulierung und weitgehend programmiersprachen unabhängige algorithmische
Lösung von Problemen gehören unbedingt dazu.
Neben der eher praktischen Schwierigkeit, die unsere Studenten mit der Ein-und Aus
gabe von Daten hatten, konnten wir eine Reihe begrifflicher Verständnisschwierigkeiten
beobachten. Die wichtigsten sind mit den Stichworten Blockstruktur, lokale und glo
bale Namen, Rekursion, verschiedene Arten von Parametern in Prozeduren und Funk
tionen, und schließlich Zeigertypen genannt.
Wir haben die Syntax der Sprache Pascal nicht nur rein verbal, sondern auch formal
präzise beschrieben. Daß wir dazu nicht - wie heute vielfach üblich - Syntaxdia
gramme, sondern eine erweiterte BNF-Notation genommen haben, hat keine inhaltli
chen, sondern rein schreibtechnische Gründe.
Die Anregung zu diesem Buch verdanken wir Herrn W. Stucky, der auch viele wertvolle
Hinweise gab. Unser Dank gilt vor allem Herrn L. Wegnerfür eine kritische Durchsicht
des Rohmanuskripts, Herrn H.W. Six für zahlreiche Diskussionen, Frl. S. Reiniger für
das Testen der Programmb eispiele und insbesondere Frau G. Hartlieb für das Schreiben
des Rohmanuskripts und die sorgfältige Anfertigung der Druckvorlage.
Karlsruhe, im August 1980 Th.Ottmann
P. Widmayer
6
Vorwort zur 2. Auflage
Bei der 2. Auflage handelt es sich im wesentlichen um einen unveränderten Nachdruck
der 1. Auflage. Neben der Beseitigung der bekanntgewordenen Druckfehler ist diese
Auflage lediglich um ein Schlagwortregister erweitert worden.
Karlsruhe, im März 1982 Th.Ottmann
P. Widmayer
Vorwort zur 3. Auflage
Bei Büchern wie diesem werden in der Regel die Druckvorlagen von den Autoren
angefertigt, oft nur mit herkömmlichen Schreibmaschinen oder gar einfachen Ma
trixdruckern. Daraus ergibt sich eine typographische Armut, die sich gerade bei
Lehrbüchern besonders unangenehm bemerkbar macht. Das Resultat unserer steti
gen Bemühungen, diesen Mangel an optischer Struktur zu beheben, liegt jetzt vor
Ihnen. Es ist nicht nur ein Buch über Pascal, sondern auch eines, das mit Hilfe eines
Pascal-Programms gestaltet wurde.
Dieses Programm, TEX, unterstützt die typographisch anspruchsvolle Gestaltung von
Dokumenten, insbesondere technisch-naturwissenschaftlichen Inhalts. TEX ist unter
Federführung von D. Knuth entwickelt worden und hat sich im akademischen Bereich
schnell verbreitet. Es ist bereits auf Mikrorechnern verfügbar und damit hoffentlich
bald vielen Autoren zugänglich. TEX erzeugt eine druckerunabhängige Beschreibung
des Dokuments; diese wird dann von einem hochauflösenden grafikfähigen Drucker
ausgegeben. Wir haben die Druckvorlage für dieses Buch mittels TEX angefertigt. Das
Buch ist durch fotografische Reproduktion unserer Druckvorlage hergestellt worden.
Wir hoffen, daß Setzereien bald mit TEX angefertigte Beschreibungen von Dokumenten
direkt zur Steuerung ihrer Druckmaschinen akzeptieren werden; damit ließe sich die
Qualität der Druckausgabe sicherlich noch beträchtlich steigern.
Mit der Verwendung von TEX haben wir die in früheren Auflagen zur Beschreibung
der Syntax gewählte erweiterte BNF- Notation durch die optisch suggestiveren Syn
taxdiagramme ablösen können.
Seit der letzten Auflage hat sich ein Standard für Pascal etabliert (ISO 7185), und
Mikrorechner mit Pascal-Übersetzern sind inzwischen weit verbreitet. Entsprechend
übertrifft die Bedeutung des interaktiven Betriebs von Rechnern die der Stapelverar
beitung bei weitem, gerade im Ausbildungsbereich.
Wir haben beiden Punkten Rechnung getragen, indem wir den ISO-Standard in dieses
Buch eingearbeitet und alle Programme auf Dialogbetrieb umgestellt haben. Die
7
Möglichkeit der Stapelverarbeitung wird dennoch exemplarisch diskutiert. Wir haben
nicht versucht, die verschiedenen auf Mikrorechnern verfügbaren Pascal-Dialekte dar
zustellen, oder Spezialitäten von Compilern zu erläutern. Das Ziel dieses Buchs bleibt
es, die Grundsätze des Schreibens guter Pascal-Programme zu illustrieren.
Die Hörer und die Tutoren der Pascal-Vorlesungen für Wirtschaftsingenieurstudenten
an der Universität Karlsruhe und unsere Kollegen am Institut für Angewandte Informa
tik und Formale Beschreibungsverfahren haben durch Kommentare und Diskussionen
zum gegenwärtigen Inhalt dieses Buches beigetragen. Herr H. Kleine Büning und Herr
W. Stucky haben uns auf kritische Punkte und Alternativen hingewiesen. Frau B. Beck
hat den Text auf einem Rechner komplett neu erfasst und mit TEX-Kommandos aus
gestattet. Frau M. Stanzel hat das Rohmanuskript dann mit äußerster Sorgfalt in
seine endgültige Form gebracht. Frau A. Bruggemann-Klein hat dabei nicht nur ihr
Expertenwissen in TEX zur Verfügung gestellt, sondern auch die 'lEX-Kommandos
(Makros) für die Definition von Syntaxdiagrammen beigesteuert. Als Vorlage dazu
hat ein Makropaket für Syntaxdiagramme gedient, das uns Herr M. Plass, XEROX
PARC, überlassen hat. Den Hinweis auf die Existenz dieses Makropakets gab uns Herr
M. Schrapp. Ihnen allen gebührt unser Dank. Ohne ihre tatkräftige Mitarbeit könnte
dieses Buch nicht in seiner gegenwärtigen Form vor Ihnen liegen.
Karlsruhe, im Januar 1986 Th.Ottmann
P. Widmayer
Vorwort zur 5. Auflage
Diese Auflage ist im wesentlichen gegenüber der dritten Auflage unverändert. Wir
haben lediglich einige Kommentare und Anregungen eingearbeitet, für die wir uns bei
den Studierenden und Kollegen an der FernUniversität Hagen bedanken.
Freiburg, im Februar 1992 Th.Ottmann
P. Widmayer
Vorwort zur 6. Auflage
Die vorliegende Auflage ist ein unveränderter Nachdruck der 5. Auflage.
Freiburg Th.Ottmann
Zürich, im Februar 1995 P. Widmayer
Inhaltsverzeichnis
Vorwort 5
Inhaltsverzeichnis 9
1. Allgemeine Eigenschaften
von Algorithmen und Programmen 13
1.1 Intuitives zu Algorithmen und Programmen 13
1.2 Schritte zur algorithmischen Lösung von Problemen 16
1.3 Historisches zur Sprache Pascal 23
2. Grundlagen und Struktur
von Pascal-Programmen 25
2.1 Zur Beschreibung der Syntax 25
2.2 Struktur von Pascal-Programmen 27
2.3 Die Beschreibung der Daten 29
2.3.1 Konstanten und Literale 29
2.3.2 Variablen und Datentypen 32
2.3.2.1 Der Datentyp integer 32
2.3.2.2 Der Datentyp real 35
2.3.2.3 Der Datentyp boolean 36
2.3.2.4 Der Datentyp char 38
2.4 Die Beschreibung der Aktionen 40
2.4.1 Einige einfache Anweisungen 41
2.4.2 Standardein- und -ausgabe 44
3. Die Steuerung der Ausführung
von Anweisungen 53
3.1 Die bedingte Anweisung (if-statement) 53
3.2 Wiederholungsanweisungen 60
3.2.1 Das repeat-statement 61
3.2.2 Das while-statement 70
3.2.3 Das for-statement 74
10
4. Selbstdefinierbare Datentypen
und die Fallunterscheidung 81
4.1 Der Aufzählungstyp 82
4.2 Der Ausschnittstyp 84
4.3 Die Fallunterscheidung (case-statement) 86
4.4 Der array-Typ 87
4.4.1 Eindimensionale arrays 87
4.4.2 Mehrdimensionale arrays 96
4.5 Besonderheiten; gepackte Darstellung 100
5. Funktionen und Prozeduren; Blockstruktur 105
5.1 Funktionen 105
5.1.0 Zum Funktionsbegriff 105
5.1.1 Funktionen in Pascal 108
5.1.2 Beispiele 110
5.2 Blockstruktur, lokale und globale Größen 113
5.3 Rekursiv definierte Funktionen 122
5.4 Beispiele für rekursiv deklarierte Funktionen 128
5.4.1 Direkte Rekursion 128
5.4.2 Indirekte Rekursion 136
5.5 Prozeduren 139
5.6 Rekursive Prozeduren 148
5.6.1 Türme von Brahma 152
5.7 Funktionen und Prozeduren als Parameter 156
5.8 Besonderheiten 160
6. Weitere strukturierte Datentypen;
das with-statement 165
6.1 Der set-Typ 166
6.2 Der record-Typ 171
6.2.1 Records ohne Varianten 171
6.2.2 Das with-statement 175
6.2.3 Records mit Varianten 179
6.3 Der file-Typ 183
6.3.1 Die Beschreibung und Manipulation
von files im allgemeinen 184
6.3.2 Text files 191
11
7. Der Zeigertyp
199
8. Marken und Sprünge
221
9. Anhang
227
9.1 Syntax 227
9.2 Schlüsselworte 243
9.3 Standardnamen 243
9.4 Sonderzeichen 244
9.5 Schlagwortregister 245
Literaturverzeichnis
255
1. Allgemeine Eigenschaften
von Algorithmen und Programmen
1.1 Intuitives zu Algorithmen und Programmen
Programmiersprachen sind künstl!ch gesci1affene Sprachen zur Formulierung von Al
gorithmen. Das wird auch ausgedrückt durch den Namen der Programmiersprache
ALGOL, die als Vorläufer der in diesem Buch behandelten Programmiersprache Pas
cal angesehen werden kann. ALGOL ist eine Abkürzung für Algorithmic Language.
(Pascal dagegegen ist kein Kunstwort, sondern erinnert an den französischen Philoso
phen, Mathematiker und Physiker Blaise Pascal, der von 1623 bis 1662 lebte.)
Die Notwendigkeit zur Formulierung von Algorithmen in künstlich geschaffenen Spra
chen wie ALGOL oder Pascal ergab sich erst aus dem Wunsch, Algorithmen durch
Computer ausführen zu lassen. Eine Programmiersprache ist damit eine Sprache, in
der man einem Computer einen Algorithmus mitteilt. Algorithmen haben allerdings
vor allem in der Mathematik schon immer eine wichtige Rolle gespielt, lange bevor die
ersten elektronischen Rechenanlagen gebaut wurden.
Eine intuitive Definition des Algorithmenbegriffs könnte etwa so lauten:
Ein Algorithmus ist ein Verfahren zur systematischen, schrittweisen Lösung ei
nes Problems.
Allgemein bekannt sind Verfahren zur Addition und Multiplikation zweier Dezimal
zahlen. Mancher Leser erinnert sich vielleicht auch noch an den Euklidischen Al
gorithmus zur Bestimmung des größten gemeinsamen Teilert~ zweier Zahlen, an ein
Näherungsverfahren zur Bestimmung der Quadratwurzel einer Zahl oder an ein Ver
fahren zum Lösen quadratischer Gleichungen. Diese und andere Verfahren sind in
vielen Schulbüchern in deutscher Sprache unter zusätzlicher Verwendung einiger ma
thematischer Sonderzeichen beschrieben. Manchmal wird ein Algorithmus auch nur
mündlich durch den Lehrer erläutert und so lange an Beispielen erklärt, bis die Schüler
wissen, wie sie einen bisher nicht behandelten Spezialfall eines Problems mit Hilfe des
Algorithmus lösen können.
Außer in der Mathematik begegnen wir auch in anderen Bereichen des Lebens Al
gorithmen ganz unterschiedlicher Art, ohne daß wir uns dessen bewußt sind. Diese
Algorithmen sind i.a. in der deutschen Umgangssprache formuliert. Wir geben einige
Beispiele:
- Ärztliche Verordnung: Nimm dreimal täglich 15 Tropfen Asperix vor den Mahl
zeiten.
- Waschanleitung: Bei 60° waschen; Waschmittelzugabe in Abhängigkeit von der
Wasserhärte nach Angaben des Waschmittelherstellers.