Eberhard Sturm Programmieren in PLII
~--Programmierung ~_~ Einführung in die Programmicrsprache P:l~cal, von G. Lamprecht Einfiihrung in die Programmicrsprachc Modul:l-2, von H. Pudlatz Parallele Programmicrung mit Modula-2, von E. A. Heinz TopSpeed Modula-2 griffl)crcit, von A. Liebetrau Das Modula-2 Umsteigcrbuch, von R. Abdelhamid Programmieren 111 PL/I von E. Sturm Einfiihrung in die Programmiersprachc Ada, von M. Nagl Einfiihrung in dic Programmiersprachc FORTRAN 77, von G. Lamprecht Einfiihrung in die Programmicrsprache SIMULA, von G. Lamprecht Einfiihrung in die Programmicrsprachc COnOL, von W.-M. Kähler Einfiihrung in die Methode des.j ackson Structured Programming (.J SP), von K. Kilberth PEARL, Process and Experimcnt Automation Realtime Language, von W. Werum und H. Windauer Prolog - Eine methodischc Einfiihrung, von R. Cordes, R. Kruse, H. Langendörfer, H. Rust LlSP - Fallstudien mit Anwendungen in der Kiinstlichcn Intelligenz, von R. Esser und E. Feldmar '---- Viewe~g--_-----
EßERHARD STURM PROGRAMMIEREN IN EINE MODERNE EINFÜHRUNG
ISBN 978-3-528-04792-4 ISBN 978-3-663-13970-6 (ebook) DOI 10.1007/978-3-663-13970-6 Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Der Autor und der Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Alle Rechte vorbehalten Springer Fachmedien Wiesbaden 1990 Ursprünglich erschienen bei Friedr. Vieweg & Sohn Verlagsgesellschaft, Braunschweig 1990. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Umschlaggestaltung: Sehrimpf und Partner, Wiesbaden
v Vorwort Was kann einen Autoren heutzutage veranlassen, ein Buch über das Programmieren in PLiI zu schreiben? Wo es doch so viele neue Programmiersprachen gibt mit tollen Konzepten wie "information hiding" und "abstrakten Datentypen" - Konzepten, die von PLiI nicht unmittelbar zur Verfügung gestellt werden. Auch was die Verbreitung von PLiI angeht, so muß man zugestehen, daß an sich nur Großrechner alle Möglichkeiten der Sprache anbieten. Die auf PC laufenden Versionen sind im Umfang etwas eingeschränkt. Nun - dies könnte sich ändern, wenn demnächst auch PCs über eine Hauptspeicher-Kapazität und eine Rechengeschwindigkeit verfügen, die die Benutzung einer universellen Programmiersprache der Mächtigkeit von PLiI interessant werden lassen. So hat z.b. die Firma IBM im Rahmen ihres SAA-Konzepts' auch einen PLII-Compiler für das PC-Betriebssystem OS/2 angekündigt. Warum also ein neues Buch über PLlI? Ich könnte eine psychologische Antwort geben, die auch für mich Gültigkeit hat: Die Loyalität eines Programmierers zu seiner Sprache ist bei PLiI am größten! Aber hat diese Loyalität auch einen realen Hintergrund? Ich meine, ja! Welche Konzepte auch nach dem Erscheinen von PLiI auf den Markt kamen, der PLlI-Programmierer konnte immer sagen: Im Prinzip kann ich das in PLiI sowieso schon und noch viel schönere Dinge! Neuere Programmiersprachen verbieten allerdings sehr viele Sprachkonstrukte, von denen sich im Laufe der Zeit herausgestellt hat, daß sie unbeabsichtigt zu Fehlern führen. Hier kann bei PLiI nur die Disziplin des Programmierers einen Ausgleich schaffen - und eine Ausbildung, die einerseits neuere Erkenntisse des "Software Engineering" berücksichtigt, andererseits aber auch die PLlI-Philosophie in den Vordergrund stellt und auf diese Weise die Klippen umschifft, die PLiI z.b. für den unbedarften FORTRAN-Programmierer2 bereithält. In diesem Sinne soll nun das vorliegende Buch eine moderne Einführung bieten. Es entstand aus Vorlesungen, die ich an der Universität Münster gehalten habe, wobei ich aber auch hoffe, daß dem Buch anzumerken ist, daß eine große Anzahl der täglich am Universitätsrechenzentrum laufenden Programme, sei es aus dem betriebssystemnahen Bereich oder dem der Computer-Grafik, aus meiner Feder stammen. Beabsichtigt ist sowohl, Anfangern ein Selbststudium zu ermöglichen, als auch, Profis, SAA heißt System-Anwendungs-Architektur und bedeutet u.a. eine gemeinsame Programmierschninstelle fur alle IBM-Rechner vom pe bis zum Groß rechner. SAA-PLII ist eine Untennenge des Großrechner-PLlI. 2 Damit soll nicht gesagt werden, daß FORTRAN-Programmierer allgemein unbedarft sind, sondern nur, daß ein solcher sich nicht wundem soll, daß z.b. bei der Division zweier ganzer Zahlen in PLiI nicht wieder eine ganze Zahl herauskommt. Letzteres vennuten normale Menschen sowieso nur ganz selten!
VI Vorwort mit neuen Ideen zu versorgen, letzteres auf Grund der umfassenden Darstellung der gesamten Sprache. Mein besonderer Dank gilt meinen Kollegen St. Ost und H. Pudlatz, die nicht nur dieses Buch korrekturgelesen haben, sondern denen ich auch viele wertvolle Anregungen verdanke. Nicht vergessen möchte ich unsere auszubildenden Mathematischtechnischen Assistenten: Ihre Hinweise haben mir u.a. geholfen, auf Anfängerprobleme einzugehen. Auch all jene, denen ich unwissentlich Beispielprogramme verdanke, sollen wenigstens auf diese Weise erwähnt werden. Erwarten Sie also keine theoretische Erörterung über Algorithmen oder Struktogramme, sondern eine praktische Einführung, die es Ihnen ermöglichen soll, konkrete Probleme mit Hilfe von PUl auf übersichtliche Weise zu lösen! Ich werde - im Gegensatz zu einem "Reference Manual" - immer erwähnen, welche Verwendung von Sprachmittein "gut" und welche "böse" ist. Einen großen Nachteil von PUl allerdings habe ich oben schon angedeutet: Wer die Sprache einmal gründlich kennengelernt hat, wird sich immer ärgern, wenn er mit einem Rechner arbeiten muß, für den es keinen PUl-Compiler gibt. Nicht umsonst heißt PUl ja "Programming Language" Nummer I!
VII Inhaltsverzeichnis Einleitung 1. Elementares PLiI... 3 1.1 Die Programmierumgebung 1.1.1 Terminal und Betriebssystem... 1.1.2 Programm und Compiler 1.2 Datenattribute 1.2.1 Der Hauptspeicher 1.2.2 Ganze Zahlen... 1.2.3 Gleitkommazahlen 1.2.4 Zeichenfolgen. 1.2.5 Bitfolgen... 1.2.6 Operatoren 3 3 3 5 5 7 11 13 16 18 1.3 Schleifen.... 20 1.3.1 Die WHILE-Schleife 1.3.2 Die UNTIL-Schleife 1.3.3 Die Schleife mit Laufvariable 20 22 23 1.4 Ein- und Ausgabe.... 25 1.4.1 Die GET -Anweisung..... 1.4.2 Die ON-Anweisung beim Einlesen 1.5 Fallunterscheidungen 1.5.1 Die IF-Anweisung 1.5.2 Die SELECT-Gruppe 25 27 30 30 33 2. Erweiterung der Grundlagen... 39 2.1 Ein- und Ausgabe eines Zeichenstroms......... 39 2.1.1 Das FILE-Attribut..................... 39 2.1. 2 EDIT -gesteuerte Ein- und Ausgabe 2.1.3 Datenformate 2.2 Die allgemeine Schleife.... 2.2.1 Die DO-Anweisung 2.2.2 Die LEA VE-Anweisung.... 2.3 Matrizen.... 2.3.1 Deklaration und Benutzung.. 2.3.2 Matrixoperationen 2.3.3 Mehrdimensionale Matrizen 2.3.4 Das INITIAL-Attribut 2.4 Strukturen 2.4.1 Deklaration und Benutzung 2.4.2 Die Matrix von Strukturen 2.4.3 Mehrfachdeklarationen 2.5 Manipulation von Zeichenfolgen 2.5.1 SUBSTR und LENGTH 2.5.2 INDEX.... 42 46 50 50 53.... 55 55 58 59 62 64 64 69 70 72 73 75
VIII Inhaltsverzeichnis 2.5.3 TRANS LA TE 2.5.4 VERIFY und das Gegenteil.... 76 78 2.5.5 Übrige spracheigene Funktionen zur Zeichen verarbeitung.... 82 2.5.6 PICTURE-Zeichenfolgen.... 84 2.5.7 GET/PUT STRING.... 85 2.6 Arithmetik.... 86 2.6.1 Das FIXED-Attribut.... 86 2.6.2 Das FLOAT-Attribut 90 2.6.3 Rechenregeln und Fallstricke.... 92 2.6.4 PICTURE-Zahlen.... 96 2.6.5 Komplexe Zahlen.... 102 2.7 Manipulation von Bitfolgen.... 104 2.7.1 Operatoren und spracheigene Funktionen.... 105 2.7.2 Mengenlehre.... 107 2.7.3 UNSPEC.... 108 3. Block- und Programmstruktur... 113 3.1 Geltungsbereich und Lebensdauer von Variablen... 113 3.1.1 Der BEGIN-Block... 113 3.1.2 Der PROCEDURE-Block.... 3.1.3 Schachtelung von Blöcken.... 3.2 Strukturierung durch Prozeduren.... 3.2.1 Die Parameter-Übergabe.... 3.2.2 Scheinargumente.... 3.2.3 Die Attribute AUTOMATIC und STATIC.... 3.2.4 Funktionen 3.2.5 Rekursive Prozeduren.... 3.2.6 Interne und externe Prozeduren.... 3.2.7 Benutzung von Programmbibliotheken.... 3.3 Ausnahmebedingungen.... 3.3.1 Allgemeine Handhabung.... 3.3.2 Berechnungsbedingungen.... 3.3.3 Programm-Test.... 3.3.4 Restliche Bedingungen.... 3.4 Objektorientierte Verwendung von Prozeduren.... 3.4.1 Die ENTRY-Anweisung.... 3.4.2 Das GENERIC-Attribut.... 115 116 117 118 121 122 125 127 131 134 139 139 146 150 158 162 163 166 4. Dynamische Speicherplatzverwaltung.... 4.1 Das CONTROLLED-Attribut.... 4.1.1 ALLOCATE und FREE.... 4.1.2 Stapel.... 4.1.3 Das INITIAL-CALL-Attribut.... 4.2 Das BASED-Attribut 4.2.1 Dynamische Speicherplatzinterpretation.... 4.2.2 Lineare Listen.... 4.2.3 Allgemeine Listen.... 171 171 171 174 178 179 179 183 190
In h altsycrzcichnis 4.3 Das AREA-Attribut.. 4.3.1 Benutzung von Gebieten 4.3.2 Speicherbereinigung 5. Benutzung von Dateien.... 5.1 Aufbau von Datenbeständen auf Band und Platte. 5.1.1 Das Magnetband 5.1.2 Die Magnetplatte 5.2 PUl-Dateien 5.2.1 Dateiwerte... 5.2.2 Dateiattribute 5.2.3 Öffnen und Schließen 5.3 Ein- und Ausgabe von Sätzen.... 5.3.1 CONSECUTIVE-Datenbestände 5.3.2 REGIONAL-Datenbestände. 5.3.3 VSAM-Datenbestände 5.3.3.1 Der ESDS 5.3.3.2 Der RRDS... 5.3.3.3 Der KSDS 5.3.3.4 Sekundärindizes 5.3.4 Spezielle Möglichkeiten der Ein- und Ausgabe 6. Höhere PL/I-Techniken 6.1 Matrixausdrücke... 6.1.1 Spracheigene Matrix-Funktionen.... 6.1.2 Spracheigene Funktionen mit Matrixargumenten 6.2 Variablendefinition.... 6.2.1 Korrenspondenzdefinition 6.2.2 Überlagerungsdefinition 6.2.3 isub-definition... 6.3 Parallelverarbeitung.... 6.3.1 Das EVENT-Attribut 6.3.2 Ein Alkoholismusprogramm 6.3.3 Multitasking-Konventionen 6.4 Programmgenerierung zur Übersetzungszeit.. 6.4.1 Die %INCLUDE-Anweisung. 6.4.2 Grundlagen der Makro-Sprache 6.4.3 Die Präprozessor-Prozedur 6.4.4 Definition eigener Anweisungen Anhang: Lösungsideen IX 195 195 197 203 203 203 205 207 207 208 210 214 215 220 224 226 228 229 233 234 241 241 241 245 247 247 248 249 251 252 255 260 264 265 266 270 273 277 Index... 283