Leitfäden und Monographien der Informatik Herbert Klaeren Vom Problem zum Programm
Leitfäden und Monographien der Informatik Herausgegeben von Prof. Dr. Hans-Jürgen Appelrath, Oldenburg Prof. Dr. Volker Claus, Oldenburg Prof. Dr. Günter Hotz, Saarbrücken Prof. Dr. Klaus Waldschmidt, Frankfurt Die Leitfäden und Monographien behandeln Themen aus der Theoretischen, Praktischen und Technischen Informatik entsprechend dem aktuellen Stand der Wissenschaft. Besonderer Wert wird auf eine systematische und fundierte Darstellung des jeweiligen Gebietes gelegt. Die Bücher dieser Reihe sind einerseits als Grundlage und Ergänzung zu Vorlesungen der Informatik und andererseits als Standardwerke für die selbständige Einarbeitung in umfassende Themenbereiche der Informatik konzipiert. Sie sprechen vorwiegend Studierende und Lehrende in Informatik-Studiengängen an Hochschulen an, dienen aber auch in Wirtschaft, Industrie und Verwaltung tätigen Informatikern zur Fortbildung im Zuge der fortschreitenden Wissenschaft.
Vom Problem zum Programm Eine Einführung in die Informatik Von Prof. Dr. rer. nato Herbert Klaeren Universität Tübingen 2., neubearbeitete und erweiterte Auflage B. G. Teubner Stuttgart 1991
Prof. Dr. rer. nato Herbert Klaeren Geboren 1950 in Gerolstein/Eifel. Studium der Mathematik und Informatik an der Universität Bonn (1969-1974). Wiss. Mitarbeiter am Institut für Angewandte Mathematik und Informatik an der Friedrich-Wilhelms-Universität Bonn (1975) und an der RWTH Aachen (1976-1982). Promotion 1980 bei K. Indermark. Akademischer Rat an der RWTH Aachen (1982-1988). Habilitation in Informatik (1988). Seit 1988 Professor für Informatik an der Eberhard-Karls-Universität Tübingen. Die Deutsche Bibliothek - CIP Einheitsaufnahme Klaeren, Herbert A.: Vom Problem zum Programm : eine Einführung in die Informatik I von Herbert K1aeren. - 2., neubearb. und erw. Aufl. - Stuttgart : Teubner, 1991 (Leitfäden und Monographien der Informatik) ISBN 978-3-519-12242-5 ISBN 978-3-322-93993-7 (ebook) DOI 10.1007/978-3-322-93993-7 Das Werk einschließlich aller seiner Teile ist urheberrechtiich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt besonders für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. B. G. Teubner Stuttgart 1991 Gesamtherstellung: Zechnersche Buchdruckerei GmbH, Speyer Umschlaggestaltung: M. Koch, Reutlingen
Vorwort Dieses Buch entstand aus Manuskripten des Autors zu Informatik-I-Vorlesungen an der Christian-Albrechts-Universität Kiel und der Eberhard KarIs-Universität Tübingen. An diesen Universitäten wird die Informatik I-Vorlesung außer von Hauptfachstudenten der Informatik und Nebenfachstudenten aus Mathematik und Physik und weiteren Naturwissenschaften auch von "fachfremden" Studenten der Studiengänge Wirtschaftswissenschaften (Kiel) und Allgemeine Sprachwissenschaft (Tübingen) besucht. Es kommt daher darauf an, neben einer allgemeinen Einführung in Methoden der Informatik und speziell der Programmierung Verständnis für das Wesen der Informatik ais einer formalen, der Mathematik nahe verwandten WISSenschaft zu wecken und im übrigen die notwendigen mathematischen Grundlagen innerhalb der Vorlesung selbst anzubieten. Das Buch eignet sich zu Informatik-Grundkursen für Natur- und Geisteswissenschaftler, aber auch zur Informatik-Nebenfachausbildung allgemein sowie, je nach Studienplan, auch für Informatik-I-Vorlesungen. Darüber hinaus ist es auch zu ejnem Selbststudium von Informatik-Grundkenntnissen geeignet. Es muß jedoch entsprechend dem Charakter der Informatik ein gewisses mathematisches Rüstzeug mitgebracht werden oder doch zumindest die Bereitschaft, sich dieses anzueignen. Im Anhang listen wir (im Sinne einer Festlegung von Notationen) die notwendigsten mathematischen Konstruktionen auf; darüber hinaus wird auf die angegebenen Lehrbücher verwiesen. Der Plan des Buchs ist wie folgt: Nach einer kurzen Einführung in die allgemeine Thematik behandeln wir in Kapitel 2 den Algorithmenbegriff. Voraussetzung für den Algorithmenentwurf ist die Erstellung einer Spezifikation für das zu lösende Problem. Dabei gehen wir hier von der vereinfachenden Vorstellung aus, daß die Leistung des zu erstellenden Programms die Berechnung einer Funktion im mathematischen Sinne ist. Unter diesen Bedingungen ist es sinnvoll, darauf zu bestehen, daß die Spezifikation formal abgefaßt und so präzise ist, daß sich ihre Einhaltung durch einen Algorithmus beweisen läßt. WIr stellen daher im Kapitel 2 neben einer formalen Notation ("Pseudocode") für Algorithmen-Zwischenstufen auch das grundlegende Rüstzeug für eine Verifikation von Algorithmen bereit.
6 Vorwort Jede Algorithmenentwicklung ist zum Scheitern verurteilt, solange man kein geistiges Modell der zugrundeliegenden Maschine hat. Im Kapitel 3 stellen wir daher die Registermaschine als ein einfaches, aber nicht ganz realitätsfernes Modell des Computers vor. Am Beispiel der Registermaschine wird auch die Problematik der Maschinenprogrammierung auf unterster Ebene vorgestellt. Gleichzeitig wird durch dieses Kapitel das Konzept der abstrakten Maschine eingeführt. Kapitel 4 stellt dann anhand einer einfachen Programmiersprache MlNI PASCAL, die eine echte Teilmenge von PASCAL ist, grundlegende Mechanismen höherer Programmiersprachen wie Blockstruktur und rekursive Prozeduren vor. Bei dieser Gelegenheit werden auch Mittel zur Beschreibung der Syntax und Semantik von Programmiersprachen vorgestellt. Anhand der dann folgenden Übersetzung von MINI-PASCAL in eine Maschinensprache wird deutlich gemacht, wie Blockstruktur und Rekursion auf der Maschinenebene realisiert werden. KapitelS stellt dann in knapper Form die weitergehenden Sprachkonzepte von PASCAL vor, die zur Programmierung abstrakter Datentypen notwendig sind. Diese werden in Kapitel 6 betrachtet. Dabei wird auch vorgeführt, wie man unendliche Mengen mit endlichen Hilfsmitteln konstruktiv beschreiben kann, und wie das sogenannte IIErzeugungsprinzip" bei der induktiven Definition zusammenhängt mit dem Prinzip der strukturellen Rekursion zur Definition von Abbildungen. Tübingen, Januar 1990 HERBERT KLAEREN Vorwort zur zweiten Auflage Die zweite Auflage stellt eine vollständige Neubearbeitung und Erweiterung dar. Besonders den Kollegen R. Giegerich und U. Güntzer bin ich für viele Hinweise zu Dank verpflichtet. Tübingen, Juni 1991 HERBERT KLAEREN Das Buch wurde auf einem IBM RISCSystem/6000 mit 1MB'" 2.09 CIEX 3.1) in Palatino Roman gesetzt. Die Programme zur Generierungder Syntaxdiagramme und der Abhängigkeitsgraphen sind von M. Seidel (p. 109-118) und P. Thiemann (p. 85,120).
Inhaltsverzeichnis 1 Einführung 9 1.1 Was ist Informatik?... 9 1.2 Geschichte der Programmierung................ 12 1.3 Problemlösen durch Algorithmen........... 17 2 Algorithmen und Spezifikationen 21 2.1 Spezifikationen... 21 2.2 Algorithmen........................... 31 2.3 Verifikation von Algorithmen................ 51 2.4 Termination und Rechenaufwand............. 60 2.5 Aufgaben... 70 3 Registermaschinen als Computermodell 73 3.1 Aufgaben... 94 4 Eine einfache Programmiersprache 95 4.1 Syntaktische Beschreibungsmittel... 96 4.1.1 Baclws-Naur-Form... 97 4.1.2 Erweiterte BNF.................... 103 4.1.3 Syntaxdiagramme............ 108 4.2 Syntax von Mini-Pascal..................... 111 4.3 Semantik von Mini-Pascal.................... 118 4.4 Übersetzung von Mini-Pascal in Maschinencode....... 127 4.5 Aufgaben... 140 5 Von Mini-Pascal zu Pascal 5.1 Aufgaben... 143 153 6 Abstrakte Datentypen 157 6.1 Einführung... 157 6.2 Natürliche Zahlen... 159 6.3 Wortmengen... 165 6.4 Terme... 168 6.5 Spezifikation abstrakter Datentypen... 175 6.6 Anwendungen abstrakter Datentypen... 179
8 Inhaltsverzeichnis 6.6.1 Folgen... 179 6.6.2 Binärbäume... 196 6.7 Aufgaben... 206 A Mathematische Grundlagen 208 A.1 Mengen, Relationen, Abbildungen............... 208 A.2 Formale Logik... 214 A.2.1 Aussagenlogik... 214 A.2.2 Prädikatenlogik... 217 A.3 Halbordnungen... 218 A.4 Aufgaben............................. 220 B Lösung der Übungen 221 C Literaturverzeichnis 233