Table Of ContentRainer Gmehlich
Heinrich Rust
Mehr als nur Programmieren ...
Eine EinfUhrung in die Informatik
vieweg
Lehrbuch Informatik
Aufbau und Arbeitsweise von Rechenanlagen
von Wolfgang Coy
Parallelitat und Transputer
von Volker Penner
Mehr als nur Programmieren ...
Eine EinfUhrung in die Informatik
von Rainer Gmehlich und Heinrich Rust
Objektorientierte Programmierung
von Dieter Monjau und Soren Schulze
Parallele Programmierung
von Thomas Braunl
Wissensbasierte Systeme
von Doris AltenkrOger und Winfried BOttner
Grundzuge der Theoretischen Informatik
von Wolfgang Thomas
Algorithmen und Berechenbarkeit
von Manfred Bretz
Berechenbarkeit, Komplexitat, Logik
von Egan Borger
Formalisieren und Beweisen
Logik fUr Informatiker
von Dirk Siefkes
Grundlagen des maschinellen Beweisens
von Dieter Hofbauer und Ralf-Detlef Kutsche
Computersicherheit
von Rolf Oppliger
Vieweg ----------------
Rainer Gmehlich
Heinrich Rust
Mehr als nur
Programmieren ...
Eine EinfOhrung
in die Informatik
I I
vleweg
Die Deutsche Bibliothek -CIP-Einhcitsaufuahmc
Gmehlich, Rainer:
Mehr als nur programmieren ... : eine Einfiihrung in die
Informatik / Rainer Gmehlich ; Heinrich Rust. -Braunschweig
; Wiesbaden: Vieweg, 1993
ISBN-13: 978-3-528-05248-5
NE: Rust, Heinrich:
Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art
verbunden. Die Autoren und der Verlag iibernehmen infolgedessen keine Verantwortung und werden keine da
rn". fnlgende oder sonstige Haftung iibernehmen, die aufirgendeine Art aus der Benutzung dieses Programm
Materials oder Teilen davon entsteht.
Aile Rechte vorbehalten
© Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, BraunschweigIWiesbaden, 1993
Der Verlag Vieweg ist ein Unternehmen der Verlagsgruppe Berte1smann International.
Das Werk einschlieBlich aller seiner Teile ist urheberrechtlich geschiitzt. Jede
Verwertung auBerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne
Zustimmung des Verlags unzulassig und strafbar. Das gilt insbesondere fur
Vervielfaltigungen, Obersetzungen, Mikroverfilmungen und die Einspeicherung
und Verarbeitung in e1ektronischen Systemen.
Umschlagsgestaltung: Klaus Birk, Wiesbaden
Gedruckt auf saurefreiem Papier
ISBN-13: 978-3-528-05248-5 e-ISBN-13: 978-3-322-85940-2
DOl: 10.1007/ 978-3-322-85940-2
Inhaltsverzeichnis
I Grundbegriffe des Programmierens 7
1 Eine Einfiihrung in die Grundlagen von Pascal 9
1.1 Oberblick ..................... . 9
1.2 Beispiel: Die Losung einer quadratischen Gleichung . 10
1.2.1 Losung ohne Verstandnis. . . . . 10
1.3 Bin infonneller Algorithmus . . . . . . . 11
1.3.1 Aufiosung komplizierter Schritte . 12
1.3.2 Uniibersichtlichkeitdurch Lange. 13
1.3.3 Mehrdeutigkeiten im Algorithmus . 13
1.3.4 Aufiosung von Mehrdeutigkeiten 13
1.4 Bin erstes Pascalprogramm . . . . . . . . . 14
1.4.1 Struktur eines Pascalprogramms . . 15
1.4.2 Deklaration von Konstanten und Variablen . 17
1.5 Obersetzung der ersten Programme 19
1.6 Ausgabe von Zahlen . . . . . . 21
1.7 Rechnerzahlen sind mangelhaft .. 22
1.8 Die Auswahlanweisung ..... . 23
1.8.1 Abwandlungen der Auswahlanweisung 25
1.9 Testausdriicke . . 26
1.1 0 Parametereingabe ..... . 28
1.11 Schleifen . . . . . . . . . . . 29
1.11.1 Die WHILE-Schleife . 29
1.11.2 Die pOR-Schleife 31
1.12 Syntaxdiagramme ..... . 32
1.13 Zusammenfassung . . . . . . 37
2 Ein umfangreicheres Beispiel: Das Spiel des Lebens 39
2.1 Oberblick ................ . 39
2.2 Die Spielidee . . . . . . . . . . . . . . . . 40
2.2.1 Lebewesen in einer Schachbrettwelt 40
2.2.2 Verschiedene Nopelvoiker . . . . . 41
2.2.3 Bin Pftichtenheft zur Simulation der Nopelwelt 43
2.2.4 Modularisierung von Algorithmen 45
2.2.5 Die Grobaufteilung der Aufgabe . . . . . . . . 45
2 Inhaltsverzeichnis
2.2.6 Die Modulstrukturdes Lebensspiel-Algorithmus 46
2.2.7 Der informelle Algorithmus 46
2.2.8 Die Einzelaufgaben ............... 47
2.3 Ein Programm .Lebensspiel" . . . . . . . . . . . . . . . 49
2.3.1 Die Darstellung der Nopelwelt im Rechner mit einem Feld 49
2.3.2 Mehrdimensionale Felder . . . . . . . . 50
2.3.3 Prozeduren zur Losung von Teilaufgaben 52
2.3.4 Sichtbarkeit von Namen . . . . 54
2.3.5 Wiederverwendung von Namen . . . . . 55
2.3.6 Parameter ftiT Unterprogramme ... . . 56
2.3.7 Das Hauptprogramm ohne Unterprogramme . 57
2.3.8 Setzen der Anfangskonstellation 58
2.3.9 Einlesen der Laufparameter . . 59
2.3.10 Ausgabe der Nopelwelt .... 60
2.3.11 Berechnung aller Generationen 61
2.3.12 Ausgabeparameter . . . . . . . 62
2.3.13 Die Berechnung einer neuen Generation 63
2.3.14 Zahlung der Nachbarn . . . . 64
2.3.15 Test auf Lebendigkeit . . . . . . . . . 65
2.3.16 Rtickschau auf das Programm . . . . . 66
2.3.17 Probleme bei der Modularisierung von Algorithmen . 66
2.4 Syntaxgraphen von Feldem und Prozeduren 68
2.5 Variationen der Aufgabenstellung 68
2.6 Eine sichere Eingabefunktion 69
2.6.1 Der Datentyp char 70
2.6? Typenoeklarationen 70
2.6.3 Funktionen...... 71
2.6.4 Die Erkennung einer gtiltigen Zahl mit endlichen Automaten 72
2.6.5 Ein Programm mit Zustandsvariable . . . . . . . . . 74
2.6.6 Die Berechnung des Zahlenwertes einer Ziffemfolge .... 75
2.7 Eine zufaIlige Anfangskonstellation . . . . . . . . . . . . . . . . . 75
2.7.1 Ein Algorithmus zur Erzeugung einer Pseudozufallszahlenfolge. 76
2.8 Eine Neuinterpretation der Zustfulde 78
2.8.1 Sortieren der Statistik 79
2.9 Rekursive Algorithmen. . . . 80
2.9.1 Rekursive Programme 82
2.9.2 Mergesort 83
2.10 Zusammenfassung . . . . . . 85
3 Hardware 87
3.1 Beschreibungsebenen der Hardware 87
3.2 Bits und Bytes . . . . . . . . 89
3.3 FUnktionsgruppen im Rechner 91
3.4 Zusammenfassung . . . . . . 98
Inbaltsverzeicbnis 3
II Formale und ethische Grenzen 99
4 Die formale Spezifikation von Problemen 101
4.1 UnzuUinglichkeit infonneller Aufgabenstellungen 101
4.2 Die Aussagen- und Pradikatenlogik 103
4.2.1 Logische Aussagen ........... 103
4.2.2 Logische Operatoren . . . . . . . . . . . 105
4.2.3 Distributivitat, AssoziativWit, Kommutativitat, Modus Ponens. 107
4.2.4 Modus Ponens . . . . . . . . . . . . . . . . 109
4.2.5 Pradikatenlogik . . . . . . . . . . . . . . . 110
4.2.6 Fonnale Spezifikation: Das Beispiel Sortieren 117
4.3 Grenzen der Spezifikation . . . . . . . . . . . . . 118
4.3.1 Bedeutungsverlust dUTCh Spezifikation . . . 119
4.3.2 Spezifikation von umfangreichen Aufgaben 120
4.3.3 Wirkungen auf die Gesellschaft 120
4.4 Zusammenfassung . . . . . . . . . . . . . . . . . 121
5 Validierung von Programmen 123
5.1 Uberblick ........ 123
5.2 Der Test von Programmen 123
5.2.1 Teststrategie... 125
5.2.2 Modultest und Systemtest 126
5.2.3 White-Box-Tests und B1ack-Box-Tests . 126
5.3 Zur Leistungsfahigkeit von Black-Box-Tests. 127
5.3.1 Leistungen und Mangel von Tests 128
5.4 Die fonnale Verifikation von Programmen 129
5.4.1 Ein Beweis . . . 129
5.4.2 Die Beweisidee 131
5.4.3 DieZuweisung. 131
5.4.4 Folgerungen.. 132
5.4.5 Sequenz.... 133
5.4.6 Beispiel: Austausch zweier Werte 133
5.4.7 Auswahlanweisung ....... 135
5.4.8 Ein Beispiel fUr den Beweis eines Programms mit Auswahlanwei-
sung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 135
5.4.9 Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 138
5.4.10 Ein Beispiel ftiT einen Beweis mit Hilfe einer Schleifeninvariante 138
5.4.11 Tenninierung von Schleifen . . . . . . . . . . . . . . . . . .. 141
5.4.12 Ein etwas gri:'lBeres Beispiel: Bestimmung des Maximums einer
Liste . . . . . . . . . . . . . . . . . . . . . 142
5.4.13 EinigeProbleme bei fonnalen Verifikationen .... 146
5.4.14 Das Halteproblem . . . . . . . . . . . . . . . . . . 148
5.4.15 Folgerungen aus den Grenzen der fonnalen Beweise . 149
5.5 Reviews . . . . . 150
5.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . 151
4 Inhaltsverzeichnis
6 Der Zeitbedarf beim Programmablauf 153
6.1 Die Stoppuhr-Zeit . . . . . . . . . . . . . . . . . 153
6.2 Beispiel: Die Suche eines Elementes in einer Liste . 154
6.3 Die Messung der "GroBe" von Eingabedaten . 156
6.4 Ein schon bekanntes Beispiel: Selection sort 157
6.5 Ein neues Beispiel: Heapsort . 159
6.5.1 Der Algorithmus . . . . . . . . . . 160
6.5.2 Laufzeit . . . . . . . . . . . . . . 165
6.6 Vergleich der Laufzeiten von Selectionsort und Heapsort 166
6.6.1 Das O-Kalkiil . . . . . . . . . . . . 167
6.6.2 ,,schwere" Probleme und Heuristiken 168
6.7 Zusammenfassung . . . . . . . . . . . . . . 171
7 Wirkungen der Informatik 173
7.1 Ein Fehler im Space Shuttle . . . . . . . . . . . . 173
7.2 Ein Programmierfehler in einem Bestrahlungsgertit 174
7.3 Gefahren dUTch ProzeBrechner 176
7.4 Gefahren durch Datenbanken. . . . . . . . . . . . 176
7.5 Begriffsspharen .................. 177
7.6 Verantwortbarkeit des Einsatzes von Informatik in der GroBtechnik 180
7.7 Programmieren als ethisches Problem . . . . . . . 180
7.8 Ein letztes Beispiel: Militlirische Friihwarnsysteme 181
7.9 Zusammenfassung . . . . . . . . . . . . . . . . . 182
III Anhang 187
Symbolverzeichnis 189
Musterlosungen 191
Literaturverzeichnis 231
Index 232
Vorwort
Dieses Buch richtet sich an Menschen, die sich bislang nicht mit Fragen der Informatik
beschaftigt haben, sich aber daftir interessieren. Zum Verstandnis werden keine informa
tikspezifischen Vorkenntnisse benOtigt.
Die beiden Teile des Buches - "Grundbegriffe des Programmierens" und ,,Formale und
ethische Grenzen" - konnen bei entsprechenden Vorkenntnissen unabhangig voneinander
bearbeitet werden. Den Anfang bildet eine EinfUhmng in die Programmiersprache Pascal;
wir versuchen allerdings nicht, ein vollstandiges Pascal-Lehrbuch zu ersetzen. Die Vorstel
lung von Pascal erfolgt nur insoweit, als die Sprache benotigt wird, urn gewisse Prinzipien
von Algorithmen zu beschreiben. Den Zweck der Sprachbestandteile illustrieren wir durch
ihre Verwendung in einem iiber die ersten beiden Kapitel hinweg entstehenden Programm,
dem sogenannten "Spiel des Lebens". Dabei werden Besonderheiten und Schwierigkeiten
besprochen, die bei der Programmierung, vor allem von nicht ganz trivialen Programmen,
auftreten konnen. Die Kapitel iiber die Programmierung werden mit einer Vorstellung
von Sortieralgorithmen beendet, die ebenfalls im Kontext des Spiels des Lebens Ver
wen dung finden. 1m dritten Kapitel wird eine kurze EinfUhmng in die Funktionsweise
eines Rechners auf der Hardwareebene gegeben. Das nli.chste Kapitel befaBt sich mit der
Aussagenlogik und Pradikatenlogik, die als Hilfsmittel zur Spezifikation benotigt werden.
Die Spezifikation von Algorithmen ist damit das Haupthema dieses Kapitels. 1m fUnften
Kapitel geht es urn die Fragen der Korrektheit eines Programms. Der Aufwand eines
Algorithmus ist Thema des sechsten Kapitels. 1m letzten Kapitel schlieBlich geht es urn
einige nichtbeabsichtigte Auswirkungen der Informatik.
In allen Kapiteln gibt es Aufgaben, die die LeserIn zum besseren Verstandnis des dargebo
tenen Stoffes bearbeiten kann. Zu den Aufgaben, die miteinem Stem (*) versehen sind, gibt
es im Anhang Musterlosungen. Am Ende jedes Kapitels erfolgt eine Zusammenfassung
der wichtigsten Punkte des im Kapitel dargestellten Stoffes. Diese Zusammenfassungen
bieten der LeserIn eine Moglichkeit, das eigene Verstandnis zu iiberpriifen.
Es ist uns ein besonderes Vergniigen, unseren Dank jenen Menschen auszusprechen, die
auf irgendeine Art und Weise zum Entstehen dieses Buches beigetragen haben. Ein be
sonderer Dank geht an Prof. Dr.-Ing. R. Vollmar und seinen Lehrstuhl ,Jnformatik fUr
Naturwissenschaftler und Ingenieure" an der Universitat Karlsruhe, wo wir dieses Buch
erstellen konnten. Ein weiterer besonderer Dank geht an unsere Korrekturleser Daniel
Bohl, Susanne Mantino, Giinther Menz, Matthias Nolle und Sabine Ochtrop fUr ihre
schnellen und ptinktlichen Bemtihungen, dieses Buch zu verbessem. Wir danken dem
6 Inbaltsverzeicbnis
Verlag Vieweg, im besonderen dem Lektor Herrn Dr. Klockenbusch, fUr seine Initiative
zu Beginn dieses Projektes und seine freundliche Untersttitzung in dessen Verlauf. Ab
schlieBend mochten wir uns bei all den Menschen bedanken, mit denen wir wahrend der
Erstellung des Manuskripts unsere Vorstellungen diskutieren konnten und die uns mit
einer Unzahl hilfreicher kritischer Bemerkungen weitergeholfen haben.
Rainer Gmehlich, Heinrich Rust
Karlsruhe, den 14. Dezember 1992