Rainer 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