B Programm Praxis Band 4 Richard Kaiser Grundlegende Elemente des Programmierens Eine Einfuhrung in Pascal und in die logische Analyse von Programmen Unter besonderer Berucksichtigung von UCSD-Pascal, Apple-Pascal und Turbo-Pascal Springer Basel AG Richard Kaiser Schwärzlocher Strasse 53 D-7400 Tübingen CIP-Kurztitelaufnahme der Deutschen Bibliothek Kaiser, Richard: Grundlegende Elemente des Programmierens : e. Einf. in Pascal u. in d. log. Analyse von Programmen ; unter bes. Berücks. von UCSD-Pascal, Apple-Pascal u. Turbo-Pascal / Richard Kaiser. - Basel ; Boston ; Stuttgart : Birkhäuser, 1985. (Programm-Praxis ; Bd. 4) ISBN 978-3-7643-1689-1 NE:GT Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Kein Teil dieses Buches darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form durch Fotokopie, Mikrofilm, Kassetten oder andere Verfahren reproduziert werden. Auch die Rechte der Wiedergabe durch Vortrag, Funk und Fernsehen bleiben vorbehalten. © Springer Basel AG 1985 Ursprünglich erschienen bei Birkhäuser Verlag Basel 1985 Umschlaggestaltung: Bruckmann & Partner, Basel ISBN 978-3-7643-1689-1 ISBN 978-3-0348-5278-4 (eBook) DOI 10.1007/978-3-0348-5278-4 5 FUr die beiden Knallkopfe Alexander und Daniel. 7 Inhalt Vorwort ............•.......................................... 11 Teil 1: Einfuhrung 1. Grundbegriffe der EDV und des Programmierens ........•...... 15 1. Der Aufbau eines Computer systems ........................ 15 2. Die binare Darstellung von Daten ................•....... 17 3. Wie eine Maschine rechnen kann ........................•. 23 4. Zur historischen Entwicklung der Programmierung ......... 27 2. Das UCSD p-System, das Apple Pascal System und das Turbo Pascal System 1. Das UCSD p-System und das Apple Pascal System ........... 29 1. Wie man den Rechner in Betrieb nimmt ............••.. 30 2. Die Struktur des UCSD p-Systems ..................... 31 3. Der Editor.......................................... 33 4. Der Filer ....................................•.•.... 45 S. Der Compiler ........................................ 59 6. R(un ................................................ 62 7. e (Xecute .....................................•.....• 62 2. Das Turbo Pascal System ...............................•. 63 1. CP 1M und MS-DOS ........................•.•.......... 63 2. Das Hauptmenu des Turbo Pascal Systems .•............ 64 3. Der Turbo-Editor.................................... 65 8 Teil 2: EinfUhrung in Pascal und in die logische Analyse von Programmen 1. Ein- und Ausgabe-Anweisungen, Variable und Bezeichner 72 2. Vordefinierte Datentypen 77 3. Der Aufbau eines Pascal-Programms ...................... 81 Mehr Uber Ausgabeanweisungen .....•.................... 84 4. Datensatze und die Vereinbarung von Datentypen 88 1. Records .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 2. Die with-Anweisung und die Verbund-Anweisung ........ 91 3. Der Typ-Vereinbarungsteil ...............•........•.. 93 5. Prozeduren 101 6. Wertzuweisungen, AusdrUcke und Ablaufprotokolle .•....... 106 1. Wertzuweisungen ...................................... 106 2. AusdrUcke .........•.................................. 108 3. Vordefinierte Funktionen ................•............ 110 4. Ablaufprotokolle ...........................•......... 113 3. Die symbolische AusfUhrung von Anweisungen ........... 115 4. Der Nachweis von Beziehungen zwischen Variablen .... ... 117 7. Bedingte Anweisungen 1 21 1. Die If -Anweisung ..................................... 121 Die bedingte AusfUhrung einer Anweisung .............. 122 Die Auswahl einer von zwei Anweisungen ............... 127 Die VerknUpfung von booleschen AusdrUcken ............ 133 Die Auswahl einer aus mehreren Anweisungen .•......... 139 2. Die Case-Anweisung ................................... 150 8. Wiederholungsanweisungen 154 1. Die Repeat-, While- und For-Anweisung ............... 154 PlausibilitatsprUfungen .............................. 159 2. Ablaufprotokolle fUr Schleifen ......•............•... 164 3. Bedingungen nach dem Verlassen einer Schleife ........ 168 4. Die endliche AusfUhrung von Schleifen ................ 169 5. Der Nachweis des Ergebnisses einer Schleife ...•...... 171 9. Boolesche Variable 179 10. Der Aufbau eines Blocks und die Strukturierung von Blacken 184 1. Der Label-Vereinbarungsteil und die Goto-Anweisung ... 184 2. Der Konstanten-Vereinbarungsteil ...........•......... 186 3. Der allgemeine Aufbau eines Blocks ................... 187 4. Blockstrukturierung und Lokalitat •................... 187 11. Funktionen und Prozeduren mit Parametern 194 1. Funktionen ..............•...............•..•......... 194 Ein Beispiel fUr eine boolesche Funktion ............. 200 Seiteneffekte ..........................•............. 203 2. Prozeduten mit Parameteren ........................... 205 3. Werte- und Variablenparameter ..............•........• 206 9 12. Arrays.................................................. 212 Ein Beispiel zur Erzeugung von Testdaten ..•.••...•.•...• 221 Lineares Suchen •.•.•••.••.•••••••.•.••.•••••..•••••••••• 229 Sortieren durch Auswahl ••...•...•...•.•.•.•••••••.•••••• 231 Binares Suchen .•...••••••••..••••••.••.•.•.•••••.•.••••• 238 Einfugen und Loschen von Daten in sortierten Arrays •.••. 245 13. Dateien .••••.•.••••..•••••••.•...•.•.••..••...••.•.••.•. 247 1. Sequentielle Dateibearbeitung ••••.••••.•••••••••.•••• 250 2. Dateibearbeitung im Direktzugriff .•••••.•••••.•••••.• 269 Dateizugriff uber Schlusseltabellen .•••••••.••..••••• 273 Sortieren durch gestreute Speicherung •••••••••.•...•• 275 3. Textfiles ••••...••.••.••..•.••.•••.•.•.•..••.•.•.•.• 278 4. Mischen von Dateien • . • • • . • . • • . • . . • . . • . • . • • • . • . • . . • • . 282 Mischen von 2 Dateien •••••••••••••..••••.•.••••...••• 283 Mischen von 2 Dateien mit Folgeprufung ••••••••••••••. 285 Mischen von mehr als 2 Dateien .•..•....•••.•.•.•••••• 287 Sortieren von Dateien ...•••.••.•••.•••..••••.••••••.• 289 5. Gruppenverarbeitung •..•••.•.•..•.•.•.•....••.•.•.•.. 290 6. Fortschreiben von Dateien •••.•..•••••.••.•••••••••••. 298 Eine Bestandsdatei und eine Bewegungsdatei •••.•••.•• 298 Mehr als 2 Bewegungsdateien .•.•.•....•....•••.•..••.•. 303 In der zeitlichen Reihenfolge der Bewegungsdaten 305 Fortschreiben mit Erganzungen und Loschungen .•.••••.• 305 14. Einfache Datentypen •.•••••..•••.•.•....•..•.•••.••••••.• 307 1. Der Aufzahlungstyp ...••.•...•.•..•.•.•.•.•.•••••..••. 307 2. Unterbereichstypen ••••••.•••.•.•..•••.•.•..••...•..•• 309 3. Die Funktionen ord, succ und pred .••.••••.••....••.•. 310 4. Einfache Datentypen, Arrays, die For- und Case-Anweisung 311 15. Mengen 313 1. Werte des Typs Menge •..••...•...•••..•.•••••.••.••.•• 313 2. Mengentypen und Mengenoperationen •.•.•.•.•.•••.•.•... 315 3. Mengenoperationen und Mengenvergleiche ••.••••.•..••. 316 16. Rekursion .•••.•••......••.•••••••.•..••.•..•..•••...•••• 320 1. Einfuhrende Beispiele ••••.••••.••.....•..•.•••...•.•. 320 2. Quicksort ••.••..••.••••••••.•.••••••••••..••..•..•... 324 17. Variante Records 327 Variante Records ohne Erkennungsfeld •••.••.•.••.•••.•••• 329 lB. Dynamische Variable..................................... 332 1. Zeigerypen, Zeigervariable und die New-Anweisung .••.• 332 2. Rekursive Datentypen •.••.•.•••.•.••...•.•.•.•...•••.• 336 3. Lineare Listen ..••••.••.••••.•.•••..•.••.••••.••..••• 327 4. Baumstrukturen ••..•....•.•.•....•••.•...••••.•••••••. 346 Geordnete Schlusselbaume .•••..••...•..••••••••••.•••• 346 Ein einfacher Interpreter fur flexible Dateiabfragen 351 Literaturverzeichnis 359 Stichwortverzeichnis 361 Vorwort Das vorliegende Manuskript entstand aus Uber 20 Vorlesungen und Kursen, die der Verfasser in den letzten Jahren an der PH und FH Reutlingen sowie fUr die Integrata GmbH, TUbingen, und das Digital Equipment Schulungszentrum MUnchen gehalten hat. Es richtet sich sowohl an Anfanger als auch an Leser mit Erfahrungen im Programmieren. Da keinerlei Vorkenntnisse Uber das Programmieren vorausgesetzt werden, sind viele Teile fUr einen Leser mit Programmiererfahrungen einfach zu lesen. In meinen Kursen hat sich aber gezeigt, daB die dargestellten Verfahren zur Analyse von Programmen auch fUr die meisten Programmierer mit mehrjahriger Berufspraxis neu waren und als fUr die praktische Arbeit sehr nUtzlich begrUBt wurden. Der vorliegende Text ist in zwei weitgehend unabhangige Teile gegliedert. Das erste Kapitel des ersten Teils gibt einen knappen Uberblick Uber den Aufbau und die Arbeitsweise eines Computers. 1m zweiten Kapitel werden die am weitesten verbreiteten Systeme zur Entwicklung von Pascalprogrammen auf Personalcomputern vorgestellt. Da allerdings im zweiten Teil fast nirgendwo auf den ersten Teil Bezug genommen wird, kann der erste Teil auch Ubergangen werden. 1m zweiten Teil (dem eigentlichen Hauptteil) findet der Leser eine EinfUhrung in die Programmiersprache Pascal und in die Analyse von Programmen. Dabei werden die Besonderheiten von UCSD Pascal, Apple Pascal und Turbo Pascal berUcksichtigt. Es ist allerdings nicht meine Absicht, aIle Spezialitaten dieser Pascal-Versionen darzustellen. Vielmehr liegt der Schwerpunkt auf der Darstellung grundlegender Programmiertechniken. Dazu gehoren auch Techniken mit denen untersucht werden kann, ob ein Programm tatsachlich macht, was es machen solI. Aus diesem Grund werden auch Verfahren zur Analyse von Programmen behandelt. Urn den Einsatz dieser Techniken zu veranschaulichen, wurden zahlreiche Ubungsaufgaben in den Text aufgenommen. Die Auswahl der Aufgaben erfolgte vor allem unter dem Gesichtspunkt, daB sie typische Anwendungen behandeln. Die meisten Aufgaben wurden auBerdem so gestaltet, daB sich deren Losungen im Laufe der Zeit zu einem umfangreichen Programm zusammenfUgen. Der Leser erhalt so Erfahrungen im Umgang mit relativ groBen Programmen. Damit der Leser die Moglichkeit hat, die Aufgaben selbstandig zu bearbeiten, befinden sich die Losungen meist auf der RUckseite der Aufgabenseite.