Harry Feldmann Einfuhrung in PASCAL Programmiersprachen -----------... Formale Sprachen, von H. Becker und H. Walter Einflihrung in die Programmiersprache FORTRAN IV, von G. Lamprecht Einffihrung in ALGOL 60, von H. Feldmann Einffihrung in ALGOL 68, von H. Feldmann Einfuhrung in PASCAL, von H. Feldmann Einffihrung in die Programmiersprache PL/1, von H. Kamp und H. Pudlatz Einflihrung in die Programmiersprache SIMULA, von G. Lamprecht Einflihrung in die Programmiersprache BASIC, von W.-D. Schwill und R. Weibezahn BASIC in der medizinischen Statistik, von H. Ackermann Einffihrung in die Programmiersprache COBOL, von W.-M. Kahler PEAR L, Process and Experiment Automation Realtime Language, von W. Werum und H. Windauer Vieweg --------------- Harry Feldmann EinfOhrung in PASCAL Skriptum fur Harer aller Fachrichtungen ab 1. Semester Friedr. Vieweg &S ohn Braunschweig/ Wiesbaden CIP-Kurztitelaufnahme der Deutschen Bibliothek Feldmann, HaIry: Einflihrung in PASCAL: Skriptum flir Horer aUer Fachrichtungen ab 1. Sem./Harry Feldmann. - Braunschweig; Wiesbaden: Vieweg. 1981. (Uni-Text) ISBN-13: 978-3-528-03342-2 NE:GT Aile Rechte vorbehalten © Friedr. Viewag & Sohn Verlagsgesellschaft mbH, Braunschweig 1981 Die Vervielfiltigung und Obertragung einzelner Textabschnitte, Zeichnungen oder Bilder auch fur die Zwecke der Unterrichtsgestaltung gestattet das Urheberrecht nur, wenn sie mit dem Verlag vorher vereinbart wurden. 1m Einzelfall muB uber die Zahlung einer Gebuhr fur die Nutzung fremden geistigen Eigentums entschieden werden. Oas gilt fur die Vervielfiiltigung durch aile Verfahren einschlieBlich Speicherung und jede Obertragung auf Papier, Transparente, Filme, Binder, Platten und andere Medien. . ISBN-13: 978-3-528-03342-2 e-ISBN-13: 978-3-322-85542-8 001: 10.1007/ 978-3-322-85542-8 Vorwort -3- v 0 R W 0 R T -------------------------- Das vorliegende Skriptum entstand aus Vorlesungen Uber PASCAL , die der Verfasser von 1978 bis 1980 an der Universitat Hamburg fUr Studierende al ler Fachrichtungen gehalten hat. PASCAL ( Revised Report) wurde 1972 von N. Wirth in einem Be richt der TH ZUrich vereffentlicht. 1975 erschien ein PASCAL User Manual von K. Jensen und N. Wirth zum Revised Report. Heute gehert PASCAL mit zum Standardsoftware - Angebot der GroB- rechenanlagen- Herstel ler und es wird zunehmend auch fUr Klein rechner PASCAL imp(ementiert. Unter den modernen universellen und fUr strukturiertes Pro- grammieren geeigneten Programmiersprachen ALGOL 68, PASCAL, PL1, SIMULA ist PASCAL am wenigsten umfangreich, daher am leichtesten lehrbar und erlernbar und sogar fUr Programmier- Anfanger ohne weiteres verstandlich. Darauf ist wohl der weltweite Erfolg von PASCAL insbesondere in der Informatik - Lehre zurUckzufUhren. Auch dem Leser dieses Skripts sol I ein leichter Zugang zu PASCAL ermeglicht werden. Dazu verwenden wir das eigens fUr PASCAL von Wirth entwickelte Syntax- Diagramm ( Anhang A1 ff ), das die ( leider noch kontext freie ) PASCAL - Gram~atik adaquat und in einer fast von selbst verstandlichen graphischen Form darstel It. Der Autor dieses Skripts hat gezeigt ( H. Feldmann, Kurzvortrag GI - Tagung Berlin 1978), daB auf zwei Schichten erweiterte Wirth- Diagramme sogar kontext-sensitive Grammatiken gut verstandlich darstellen kennen. Um Sprachbarrieren abzubauen, wurden aile grammatischen Formu lierungen von Englisch in Deutsch Ubersetztj jedoch scheut der -4- Vorwort Autor sich nicht, im deutschen Text auch 5fter die englischen FachausdrUcke zu benutzen, insbesondere, wenn auf das englisch sprachige Syntax- Bezug genommen werden soil. Dia~ramm nieses Skriptum sol lauch denjemigen Leser offenstehen,der PAS CAL nur fUr bestimmte, abgegrenzte Vorhaben, d. h. nicht deduktiv anhand der Grammatik, sondern induktiv anhand von Beispielen er lernen wil I. Dazu wurde das Syntax- Diagramm (wie im Original-(Re vised) Report) als Anhang an den Schlu2 gestel It und die m5glichst kurzen und instruktiven Beispiele so ausfUhrlich erkl§rt, als g§be es keine Grammatik. Die Kapitel 0 ( Einleitung ), 1 ( einfache Datentypen und READ/ WRITE ), 2 (Programmkopf und Vereinbarungen) und 3 AusdrUcke und Anweisungen ) sol Iten vom Leser in der angegebenen Reihenfolge durchgearbeitet werden. Sie vermitteln ihm die PASCAL- Grundlagen. Daran anschlie2end folgen die gegenUber ALGOL 60 neuen interes santen Sprachm5glichkeiten: Mengen ( Kapitel 4 ), Verweistechnik, Strukturen ( Kapitel 5), umfangreichere ( Standard- ) Prozeduren (Kapitel 6 und Anhang A2) und Dateien ( Kapitel 7). Ais wichtigste Erweiterungen des PASCAL - Standards werden noch die externen Prozedurvereinbarungen ( Kapitel 8 ) beschrieben. Am Schlu2 jedes Kapitels findet der Leser eine Zusammenstel lung von Testfragen, die entsprechend der Gliederung des Kapitels ange- ordnet und beziffert sind und dem Leser eine Kontol Ie Uber seinen p.~arbeiteten Wissensstand erm5glichen. Rechts neben den Fragen sind die Antworten notiert, die der Leser mit einem Blatt Papier abdecken und nur zu Kontrol Izwecken einsehen sollte. AuSerdem sind in Kapitel 9 Uber 100 Ubungsaufgaben (Varianten mitgez§hlt zu finden, darunter auch "nichtnumerisch eingekleidete" Aufgaben. Vorwort -5- Ais Musterl5sungen m5gen die in den Kapiteln 0 bis 7 behandelten Uber 40 ausfUhrlichen Beispiele und die vielen Kurzbeispiele dienen. PASCAL Programme sind weitgehend in Ublicher mathematischer Formelschreibweise abgefaBt und erlauben auBerdem in einfacher Weise mittels CHAR und FILE. Ein Typ STRING fUr Textverarbeitun~ Texte flexibler L~nge (wie z. B. in ALGOL 68) ist nicht vorhanden. Durch Unterscheidung von Konstanten (CONST) und Variablen (VAR) wird die Verweistechnik (f) in PASCAL Ubersichtlicher als in ALGOL 68. Leider entspricht die Schleifen- Konstruktion (drei ver schiedene inkompatible Schleifensorten) und - Notation ( zuviele BEGIN und gND ) in PASCAL nicht h5chsten ALGOL 68 - AnsprUchen des strukturierten Programmierens.Da die Zukunft blockorientierter Programmierspachen ungewiB ist ( moderne Haldentechniken mit Frei speicherverwaltung) , kann das Fehlen von geschachtelten Vereinbar ungsbereichen in PASCAL - Programmen abgesehen von Prozeduren 6.2 ) unterschiedlich bewertet werden. Der ALGOL - Programmierer wird bedauern, daB in PASCAL keine ARRAYs mit dynamisch variablen Indexgrenzen vereinbart werden k5nnen (4.2.1 ). Meinen H5rern und insbesondere den studentischen Hitarbeitern T. Fricke, A. Fricke und R. Pahl bin ich fUr die kritische Durch sicht des zugrundegelegten Vorlesungs- Skriptums und fUr Xnde zu Dank verpflichtet. Herrn A. Schubert yom rungsvorschl~ge VIEWEG - Verlag danke ich fUr seinen freundlichen Zuspruch bei dieser und den vorangegangenen Skript - Ver5ffentlichungen. FUr kl~rende Diskussionen auftretender Fragen danke ich Herrn M. Sommer (SIEMENS HUnchen) und Herrn R. Nicolovius Hamburg). Hamburg, 1980 H. Feldmann -6- Inhaltsverzeichnis I N HAL T S V E R Z E I C H N I S ---------------------------------------------------------------------- o EINLEITUNG .••••.•.•...••••.•••....•••..•••..•••...••...••.••••... 9 -------------------- 0.1 Entwicklung von PASCAL .••...•...••...•......••....•.•••.....••. 9 0.2 EinfUhrende Beispiele •.••••..•••••.•••••••••••••••.•..••••••• 11 0.3 Schreibweisen •••••••••..•••.•.••...••••..•••.••••••••.•••.•.•• 14 0.3.1 Darstellungen und Ersatzdarstel lungen •.••.••••••.•...••.••.• 14 0.3.2 Verwendung des Syntax- Diagramms Al .••••••••••••••••.•.••••• 14 0.3.3 Kommentar •••••••••••••••••••.••••••••.•••••.••••...••••••••• 16 0.4 Testfragen ••••••••..••.•••••••••••••••••••••••••••••.••.•••••• 16 EINFACHE STANDARD-TYPEN UND READ/WRITE •••••••••••••••.•••••.•••• 17 ---------------------------------------------------------------------------- 1.1 INTEGER ••••••••••••••••..•••••••••.••.•••.•••••••••••.••.•.••• 17 1.2 REAL •••••••••••••••••••••••••••••••..•.•••••.••••.•••••••••••• 18 1.3 CHAR ••••••••••••••••••••••••••••••••••.••••••••••••••••••••••• 19 1 .4 BOOLEAN ••••••••••••••••••••••••••••••••••••••••••••••••••••.•• 20 1 .5 READ/WRITE ••••••••••••.••••••••••••••••••••••••••••••••••••••• 21 1.6 Testfragen ••••••••••••••••••••••.•.••••••••••••••••••••••••••• 23 2 PROGRAMMKOPF UND VEREINBARUNGEN ••••••••••••••••••••••••••••••••• 24 -------------------------------------------------------------- 2.1 LABEL ••••••••••••.•••••••••••••••••••••••••••••••••••••••••••• 25 2.2 CONST ••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 26 2.3 TYPE ••••••••••••••••••.••••••••••••••••••••••••••••••••••••••. 26 2.4 VAR •••••••••••••••••••.••••••••••••••••••••••••••••••••••••••• 27 2.5 PROCEDURE und FUNCTION siehe 6 •••••••••••.•••••••••••••••••••• 27 2.6 Testfragen •••••••••••••••••••••••••••••••••••••••••••••••••••• 27 3 AUSDRUCKE UND ANWEISUNGEN •••••••••••••••••••••••••••••••••••••• 28 ...................................... 3.1 ==:::~;~~;:::::::::::::::: 28 3. 1 • 1 Operationsaufruf siehe A2.3 ••••••••••••••••••••• ••••••••••••28 3.1.2 Standard- Operationen siehe A2.3 ••••••••.•••••••••• •••••••••28 3.1. 3 Funktionsaufrufe siehe 6.1.1/2 •••••••••••••••••••••••••••••• 29 3.1.4 Standard- Funktionen siehe A2.4 ••••••••••••••••••••••••••••• 29 3.1 .5 Eigenmengen siehe 4.1.3 ••••••••••••••••••••••••••••••••••••• 29 3.2 Anweisungen ••••••••••••••••••••••••••••••••••••••••••••••••••• 29 3.2.1 Assignment statement ••••••••••••••••••••••••••• ••••••••••••• 29 3.2.2 Routineaufrufe siehe 6.1.1/4 •••••••••••••••••••••••••••••••• 31 3.2.3 Standard- Routinen siehe A2.5 •••••••••••••••• •••••••••••••••31 3.2.4 Compound Statement •••••••••••••••••••••••••••••• •••••••••••• 31 3.2.5 Konditionale Anweisungen ••••••••••••••••••••••••••••••• •••••31 3.2.5.1 If Statement ............................... ·•············· 32 2 Case Statement ..••••••••••••••••••••••••..•• •••·•·••·•·••• 34 3.2.6 Z 1e I aufruf •••••••••••••••••••••••••••••••••••••••••••••••••• 3~ 3.2.7 Repetive Anwe1SUngen.·······································~8 3.2.7.1 For Statement .................. ··························· 2 Whi I e Statement •••••••••••••••••••••••••• ••••••••••••••••• ~9 3 Unti I Statement .••••••••.••••••••••••••••••••• •·••••••·•·• 1 Inhaltsverzeichnis -7- 3.2.8 Empty Statement .• "",,"""""""""""""""""""""""""""""""""""""""" 42 3.2.9 With Statement siehe 5.2.3 •••••••••••••••••••••••••••••••••• 42 3.3 Testfragen" " " " "" " " " " " " " " " " " " " " " " " " " " " "" " " " " " " " " " " " " " "" " " " " " " " ,,43 4 MENGEN UND FELDER ••••••••••••••••••••••••••••••••••••••••••••••• 45 ================= 4.1 Mengen" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ,,45 4.1.1 Aufzah I typen" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ,,45 4.1.2 Teilbereichtypen •••••••••••••••••••••••••••••••••••••••••••• 46 4.1.3 Potenzmengentypen und Eigenmengen ••••••••••••••••••••••••••• 48 4.2 Fe I der."""",,""""""""""""""""""""""""""""""""""""""""""""""""" .49 4.2.1 Re ihungs t ypen" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ,,49 4.2.2 String.""",,"""""""""""""""""""""""""""""""""""""""""""""""" .54 4.3 P ACKEO" " " " " " " " " " " " .. " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ,,55 4.4 Testfragen" " " " " " " " " " "" " " " " .................................... 56 5 VERWEISVARIABLEN (POINTER) UND RECORD-STRUKTUREN •••••••••••••••• 58 ================================================ 5.1 Verweisvariablentypen und NEW ••••••••••••••••••••••••••••••••• 58 5.2 RECORD - Strukturen ........................................... 60 5.2.1 RECORD - Typen und NIL •••••••••••••••••••••••••••••••••••••• 61 5.2.2 RECORD - Typen mit CASE ••••••••••••••••••••••••••••••••••••• 65 5.2.3 With Statement .............................................. 66 5.3 Testfragen ..•..............................................•.. 67 6 PROZEDUREN UND BEREICHSSCHACHTELUNG ••••••••••••••••••••••••••••• 68 ---------------------------------------------------------------------- 6.1 Prozeduren .....................•.............................. 68 6.1 .1 ParameterUbergabe ••••••••••••••••••••••••••••••••••••••••••• 70 6.1.1.1 Wertaufruf .•................••............................ 71 2 Aufruf per Variable ....................................... 73 3 Aufruf per Prozedurname ...........•.......•............... 75 4 FORWARD- Prozedurvereinbarungen ••••••••••••••••••••••••••• 75 6.1.2 Funktionen .......................•..............•..........• 77 6.1.3 Standard- Funktionen siehe A2.4 ••••••••••••••••••••••••••••• 78 6.1.4 Routlnen .......•.........................•....•............. 78 6.1.5 Standard- Routinen siehe A2.5 ••••••••••••••••••••••••••••••• 81 6.2 Bereichsschachtelung ••••••••••••••••••••• ~ •••••••••••• •••••••• 81 6.2.1 Vere inbarungsbere ioh ........................................ 81 6.2.2 Lokal/ Global ............................................... 82 6.2.3 Aufrufbarl UnterdrUckt •••••••••••••••••••••••••••••••••••••• 83 6.2.4 Unzul~ssige SprUnge .•..•.•.....•..•....••••.••..••••..•.••. 84 6.2.5 Bereichsfreie GroBen .......•..........•......••.•........... 85 6.3 Testfragen .••...••••.•.•..•.........•...•..•.•...•••.••.•.•.•. 86 7 DATEIEN (FILE) ••••••••••••••••••••••••••• ~ •••••••••••••••••••• •• 88 ---------------------------- 7.1 Dateitypen .........•............................•............. 88 1.2 Externe Dateien ............................................... 91 7.3 TEXT, vgl. A2.2/6 ..•.•..........•.••.•....•..•.•••.••....••••• 92 7.4 Standard- Dateien INPUT, OUTPUT siehe A2.6 •••••••••••••••••••• 93 7.5 Testfragen •........•...•...................•......•........... 93 -8- Inhaltsverzeichnis 8 EINIGE ERWEITERUNGEN (NON-STANDARD) ••••••••••••••••••••••••••••• 94 =================================== 8.1 Externe Prozedurvereinbarungen •••.•••••••••••••••••••••••••••• 94 8.2 Drucker- Kontrol Izeichen •••••••••••••••••••••••••••••••••••••• 95 8.3 Positionierbare Dateien ••••••.•••••••••••••••••••••••••••••••• 95 8.4 Zus~tzliche Standard- Funktionen ••••••••••••••••••••••••••••• 95 8.5 Zus~tzliche Standard- Routinen ••••••••••••••••••••••••••••••• 96 8.6 Simulation quasiparal leler Prozesse ••••••••••••••••••••••••••• 97 8.7 Testfragen ...•.......•......•.•....••.•.....•.••.•••...•..•.•. 98 9.1-9 tJBUNGSAUFGABEt.I ••••••••••••••••••••••••••••••••••••••••••••••••• 99 ============== A ANHANG ••••••••••••••••••••••••••••••••••••••••••••••••••••••••• 108 ====== A1 SYNTAX-DIAGRAMM .•••••••••••.•.••••••.••..••.•..•••.•••••••.•••. 108 A 1 .1 Digit, caoital and smal I letter, character etc ••••••••••••••• 109 A1.2 Comment, word symbol, symbol etc ••••••••••••••••••••••••••••• 110 A1.3 Identifier, unsigned number, type etc •••••••••••••••••••••••• 111 A1.4 Variable, expression etc ••••••••••••••••••••••••••••••••••••• 112 A1.5 Statement, block, program ..•.....•.•...•.•.•..•••.•••..••.••• 11 3 A2 STANDARD-VEREINBARUNGEN •••••••••••••••••••••••••••••••••••••••• 114 A2.1 Standard- Konstanten ••••••••••••••••••••••••••••••••••••••••• 114 A2.2 Standard- Typen •••••••••••••••••••••••••••••••••••••••••••••• 114 A2.3 ( Standard-) Operationen ••••••••••••••••••••••••••••••••••••• 115 A2.3.1 Assignment •••••••••••••••••••••••••••••••••••••••••••••••• 115 A2.3.2 Arithmetic operations •.••••••••.••.••••••.••••.••••••••••• 115 A2.3.3 Relational operations ••••••••••••••••••••••••••••••••••••• 115 A2.3.4 Logical operations •••••••••••••••••••••••••••••••••••••••• 116 A2.3.5 Set ooera t ions .....................•.............•........ 116 A2.4 Standard- Funktionen •••.••.•••••••••••••••••••••••••••.••.••• 116 A2.4.1 Arithmetic functions •••••••••••••••••••••••••••••••••••••• 116 A2.4.2 Predicates ••••••••••••.•••••.•••••••.•.••••••...•.•.•••••• 116 A2.4.3 Transfer functions ••••••••.••••••••••••.•••••••••••••••••. 117 A2.4.4 Further standard functions •••••••••••••••••••••••••••••••• 117 A2.5 Standard- Routinen •.••••••••••••.•••••.••••.••••••••••••..••• 117 A2.5.1 Dvnamic al location routines ••••••••••••••••••••••••••••••• 117 A2.5.2 Data transfer routines •••••••••••••••••••••••••••••••••••• 118 A2.5.3 File handling routines ••••••••••••••••••••••••••••.••••••• 118 A2.5.4 The rout ine READ •••••••.•.•••.•••••••••••••••••.•••••.••• 118 A2.5.5 The routine WRITE ••••••••.•••.•••••••••••••••.•••.••••••• 119 A2.6 Standard- Dateien •••••••••••••••••••••••••••••••••••••••••••• 120 A3.1-3 STANDARD-SYNTAXFEHLERHELDUNGEN ••••••••••••••••••••••••••••••• 121 L LITERATURVERZEICHNIS •••••••••••••••••••••••••••••••••••••••••• 124 ==================== Ll Buchliteratur zu ( Revised) PASCAL •••••••••••••••••••••••••• 124 L2 Eine Auswahl von Algorithrnen- und Aufgabensammlungen ••••••••• 125 11-12 ALPHABETISCHER INDEX •••••••••••••••••••••••••••••••••••••••••• 126 ====================