COBOL. COBOL by the numbers (Quelle: ZDNet / Gartner Inc., 2001) Teil 5. Sprache ohne Programmierer. Entwurfsprinzipien



Ähnliche Dokumente
Teil 5 COBOL. COmmon Business Oriented Language 60

Programmieren mit COBOL

COBOL COBOL. Tobias Denzler Eve Morel. Für das Seminar: 10 Programmiersprachen

Vorwort 11 1 Einleitung Überblick Hardwareausstattung Softwarebausteine Programmentwicklung 19

COBOL Programmierte Unterweisung

Inhaltsverzeichnis. Vorwort zur zweiten amerikanischen Ausgabe 19 Vorwort zur deutschen Ausgabe 25 Vorbemerkungen 29

DO 8 I = 1, 100 ITOTAL

Common Business Oriented Language. Teil 1 - Einführung

VBA-Programmierung: Zusammenfassung

Prozedurale Datenbank- Anwendungsprogrammierung

Modul 122 VBA Scribt.docx

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Der SAS DataStep und die Prozedur SQL Cellent Finance Solutions GmbH Seite: 1

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Whitepaper. Produkt: combit Relationship Manager. Datensatzhistorie mit dem SQL Server 2000 und combit GmbH Untere Laube Konstanz

Algorithms & Datastructures Midterm Test 1

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Das neue Volume-Flag S (Scannen erforderlich)

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

10.6 Programmier-Exits für Workitems

Therefore the respective option of the password-protected menu ("UPDATE TUBE DATA BASE") has to be selected:

Java Einführung Operatoren Kapitel 2 und 3

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Zugriff auf Firebird-Datenbanken mit PHP. Daniel de West DB-Campus-Treffen 15. Januar 2004

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

Werkzeuge der Informatik UNIX

VHDL Verhaltensmodellierung

Sin-Funktion vgl. Cos-Funktion

Java Kurs für Anfänger Einheit 5 Methoden

Künstliches binäres Neuron

Informatik 12 Datenbanken SQL-Einführung

A.4 Beispiel zum -Versand über Smart Forms

Bedienungsanleitung User Manual

SWE1 / Übung 2 ( )

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

Kybernetik Intelligent Agents- Action Selection

Erwin Grüner

Übungen Programmieren 1 Felix Rohrer. Übungen

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Kontrollstrukturen - Universität Köln

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

Objektorientierte Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Übersicht Programmablaufsteuerung

Restschmutzanalyse Residual Dirt Analysis

Übung - Sicherung der Registry und Wiederherstellung von Windows XP

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Einführung in QtiPlot

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Javakurs 2013 Objektorientierung

SQL structured query language

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Fachhochschule Kaiserslautern Labor Datenbanken mit MySQL SS2006 Versuch 1

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

Access und die andern (Office) Programme. Armin Hess

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Datenmaske für SPSS. Für die Datenanalyse mit SPSS können die Daten auf verschiedene Weise aufbereitet

Teil 2: Ablauf der Analyse festlegen

A) Durchsuchen von Datenbanken im Internet durch Endnote

desk.modul : WaWi- Export

ajanzen.com Beispiele für den Umgang mit Feldsymbolen

Dr. Monika Meiler. Inhalt

DataTables LDAP Service usage Guide

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Lua Grundlagen Einführung in die Lua Programmiersprache

AsciiDoctor. Dokumentation schreiben kann Spass machen!

Laborübung - Erstellen einer Partition unter Windows XP

Ein Ausflug zu ACCESS

Themen des Kapitels. 2 Grundlagen von PL/SQL. PL/SQL Blöcke Kommentare Bezeichner Variablen Operatoren. 2.1 Übersicht. Grundelemente von PL/SQL.

Modellierung und Programmierung 1

Die Datenmanipulationssprache SQL

Oracle 12c: Neuerungen in PL/SQL. Roman Pyro DOAG 2014 Konferenz

SQL (Structured Query Language) Schemata Datentypen

Datenmanagement in Android-Apps. 16. Mai 2013

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

2. Datenbank-Programmierung

Pragmatik von Programmiersprachen

Dateiname Name(n) und Matrikelnr. des/der Bearbeiter Tel.-Nr. und -Adresse für den Fall, dass die Diskette nicht lesbar ist.

8 Zugriffstypen ( Zeiger )

Übungsblatt 8- Lösungsvorschlag

Kurzanleitung um Transponder mit einem scemtec TT Reader und der Software UniDemo zu lesen

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Schmitt, Günter (1996): Fortran 90 Kurs technisch orientiert, R. Oldenbourg Verlag, München

Zählen von Objekten einer bestimmten Klasse

SanStore: Kurzanleitung / SanStore: Quick reference guide

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

ZENTRALER INFORMATIKDIENST DER JOHANNES KEPLER UNIVERSITÄT LINZ Abteilung Kundendienste und Dezentrale Systeme. PPP für Windows 3.

Exercise (Part II) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Typo3 - Inhalte. 1. Gestaltung des Inhaltsbereichs. 2. Seitenunterteilung einfügen

Kontrollstrukturen und Funktionen in C

Transkript:

Teil 5 COBOL COmmon Business Oriented Language 60 Kaufmännische, behördliche Anwendungen E/A ist Hauptteil der Anwendung, große Zahl einfacher Berechnungen, Dezimalarithmetik, DoD & IBM, 1959/60, die treibenden Kräfte: Grace Hopper, Jean Sammet Standardisierung 1968 durch CODASYL (COnference on DAta SYstems Languages) COBOL by the numbers (Quelle: ZDNet / Gartner Inc., 2001) Crunching the COBOL numbers leads to one chilling conclusion: The projected proliferation of COBOL code over the next four years goes hand-in-hand with a drastic dwindling of the number of programmers who know anything about supporting the language. Here's the skills-hungry picture Gartner paints: 200 billion lines of COBOL code in existence in 2000 5 billion lines estimated annual growth of COBOL code over the next four years 90,000 Number of COBOL programmers in North America in 2000 13 percent estimated annual decrease in number of COBOL programmers due to retirement and death dann 1974, 1985, de facto Standard: IBM COBOL Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 1 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 2 Sprache ohne Programmierer Entwurfsprinzipien 85% des Welthandels gehen über Systeme die in COBOL implementiert sind. 60% der weltweiten Codebasis ist COBOL, die Zahl vergrößert sich sogar! Die COBOL-Programmierer gehen zur Zeit in Rente oder sterben. << Unfortunately, many four-year colleges and universities have cut back or stopped giving classes in COBOL. "You can't get the new kids the dotcommers to take a second look at COBOL. It's far easier to teach a COBOLer the dot-com stuff than vice versa. Knowing COBOL means you already know how the business runs." >> Strikte Trennung der Beschreibung von Daten und Operationen. Selbst-Dokumentation: Programme wie Sätze, Flut von Schlüsselworten, oft optional Unterscheidung Umgebung - interne Namen Statische Speicherzuteilung Keine Unterprogramme (ursprünglich) Sehr umfangreiche Sprache Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 3 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 4

ANSI-COBOL-85 Norm Obligatorische Bausteine Bestehend aus elf Bausteinen Bausteine obligatorisch, optional oder zusätzlich Verschiedene Leistungsstufen einzelner Bausteine Keine zwei Übersetzer übersetzen die gleiche Sprache. IBM Übersetzer de facto Standard. neue Norm 2002 Kern (Nucleus): allgemeine Sprachelemente, Datendefinitionen (Elemente, Gruppen, Sätze, Tabellen), Basisoperationen (Zuweisung, Arithmetik, etc.), Programmablaufsteuerung Sequentielle EA: sequentieller Zugriff auf (sequentielle) Dateien, Formatierung von Seiten in Druckdateien Programmkommunikation: Aufruf externer Programme, fremde Sprachen anbinden Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 5 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 6 Optionale Bausteine Zusätzliche Bausteine Relative EA: sequentieller und wahlfreier Zugriff auf strukturierte Dateien Indizierte EA: Sätze einer Datei indiziert mit Schlüsseln, alternative Schlüssel, sequentieller und wahlfreier Zugriff über Schlüssel Sort/Merge: Sortieren und Mischen von Dateien, Operationen zur Datensatztransformation vor dem Sortieren/Mischen, Benutzergesteuerte Sortieroperationen Testhilfe: Sprachelemente zur Fehlersuche (z.b. Statusregister) Kommunikation: Datenfernübertragung Segmentierung: Auslagerung einzelner Programmteile zur Laufzeit Quelltext Manipulation: Bibliotheksmodell, Zusammenbinden verschiedener Programme Report Writer: Listenerstellung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 7 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 8

Erweiterungen in Cobol 2002 Programmformate User Defined Functions Object Orientation National Characters, Unicode Multiple Currency Symbols Conditional Compilation Cultural Adaptability (Locales) Dynamic Memory Allocation Festes Format (veraltet): Spalte 1-6: Marke, numerisch, führende Nullen ignoriert 7: Kommentar- (*, /) oder Fortsetzungszeichen (-) 8-11: Feld A - Stufennummern, Hauptabschnitte 12-72: Feld B - Namen in Datenbeschreibungen, Anweisungen 73-80: Kommentar (ignoriert, Zeilenkennung/Numerierung) Alternative: Freies Format Binary and Floating Point Data Types User Definition of Data Types Groß-/Kleinbuchstaben äquivalent, Minuszeichen Bestandteil von Bezeichnern Überschriften, Vereinbarungen, Anweisungen abgeschlossen mit Punkt. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 9 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 10 Beispiel (IBM 1965) IDENTIFICATION DIVISION. PROGRAM-ID. 'SORT360'. AUTHOR. IBM. DATE-WRITTEN. 1965. DATE-COMPILED. UNKNOWN. SECURITY. CONFIDENTIAL. REMARKS. THIS PROGRAM WAS WRITTEN TO DEMONSTRATE THE USE OF THE SORT FEATURE. THIS PROGRAM PERFORMS THE FOLLOWING TASKS - 1. SELECTS, FROM A FILE OF 1000-CHARACTER RECORDS, THOSE RECORDS HAVING FIELD-A NOT EQUAL TO FIELD-B 2. EXTRACTS INFORMATION FROM THE SELECTED RECORDS. 3. SORTS THE SELECTED RECORDS INTO SEQUENCE, USING FIELD-AA, FIELD-BB, AND FIELD-CC AS SORT KEYS. 4. WRITES THOSE SORTED RECORDS HAVING FIELD-FF EQUAL TO FIELD-EE ON FILE-3 AND WRITES SELECTED DATA OF THE OTHER RECORDS ON FILE-2. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-360 F50. OBJECT-COMPUTER. IBM-360 F50. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE-1 ASSIGN TO 'F401' UTILITY. SELECT SORT-FILE-1 ASSIGN 'SF1' UTILITY. SELECT FILE-2 ASSIGN 'F402' UTILITY. SELECT FILE-3 ASSIGN 'F403' UTILITY. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 11 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 12

DATA DIVISION. FILE SECTION. FD INPUT-FILE-1 BLOCK CONTAINS 5 RECORDS RECORDING MODE IS F LABEL RECORDS ARE STANDARD DATA RECORD IS INPUT-RECORD. 01 INPUT-RECORD 02 FIELD-A PICTURE X (20). 02 FIELD-C PICTURE 9 (10). 02 FIELD-D PICTURE X (15). 02 FILLER PICTURE X (900). 02 FIELD-B PICTURE X (20). 02 FIELD-E PICTURE 9 (5). 02 FIELD-G PICTURE X (25). 02 FIELD-F PICTURE 9 (5). 01 FILE-2-RECORD 02 FIELD-EEE PICTURE $$$$9. 02 FILLER-A PICTURE 9 (2). 02 FIELD-FFF PICTURE 9 (5). 02 FILLER-B PICTURE X (2). 02 FIELD-AAA PICTURE X (20). 02 FIELD-BBB PICTURE X (20). FD FILE-3 BLOCK CONTAINS 15 RECORDS RECORDING MODE IS F LABEL RECORDS ARE STANDARD DATA RECORD IS FILE-3-RECORD. 01 FILE-3-RECORD PICTURE X(75). Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 13 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 14 SD SORT-FILE-1 DATA RECORD IS SORT-RECORD. 01 SORT-RECORD 02 FIELD-AA PICTURE X (20). 02 FIELD-CC PICTURE 9 (10). 02 FIELD-BB PICTURE X (20). 02 FIELD-DD PICTURE X (15). 02 FIELD-EE PICTURE 9 (5). 02 FIELD-FF PICTURE 9 (5). FD FILE-2 BLOCK CONTAINS 10 RECORDS RECORDING MODE IS F LABEL RECORDS ARE STANDARD DATA RECORD IS FILE-2-RECORD. PROCEDURE DIVISION. OPEN INPUT-FILE-1, OUTPUT FILE-2, FILE-3. SORT SORT-FILE-1 ASCENDING FIELD-AA, DESCENDING FIELD-BB, ASCENDING FIELD-CC INPUT PROCEDURE RECORD-SELECTION OUTPUT PROCEDURE PROCESS-SORTED-RECORDS. CLOSE INPUT-FILE-1, FILE-2, FILE-3. STOP RUN. RECORD-SELECTION SECTION. PARAGRAPH-1. READ INPUT-FILE-1 AT END GO TO PARAGRAPH-2. IF FIELD-A = FIELD-B GO TO PARAGRAPH-1 ELSE MOVE FIELD-A TO FIELD-AA MOVE FIELD-F TO FIELD-FF MOVE FIELD-C TO FIELD-CC MOVE FIELD-B TO FIELD-BB MOVE FIELD-D TO FIELD-DD MOVE FIELD E TO FIELD-EE RELEASE SORT-RECORD. GO TO PARAGRAPH-1. PARAGRAPH-2. EXIT. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 15 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 16

PROCEDURE DIVISION. OPEN INPUT-FILE-1, OUTPUT FILE-2, FILE-3. SORT SORT-FILE-1 ASCENDING FIELD-AA, DESCENDING FIELD-BB, ASCENDING FIELD-CC INPUT PROCEDURE RECORD-SELECTION OUTPUT PROCEDURE PROCESS-SORTED-RECORDS. CLOSE INPUT-FILE-1, FILE-2, FILE-3. STOP RUN. RECORD-SELECTION SECTION. PARAGRAPH-1. READ INPUT-FILE-1 AT END GO TO PARAGRAPH-2. IF FIELD-A = FIELD-B GO TO PARAGRAPH-1 ELSE MOVE FIELD-A TO FIELD-AA MOVE FIELD-F TO FIELD-FF MOVE FIELD-C TO FIELD-CC MOVE FIELD-B TO FIELD-BB MOVE FIELD-D TO FIELD-DD MOVE FIELD E TO FIELD-EE RELEASE SORT-RECORD. GO TO PARAGRAPH-1. PARAGRAPH-2. EXIT. PROCESS-SORTED-RECORDS SECTION. PARAGRAPH-3. RETURN SORT-FILE-1 AT END GO TO PARAGRAPH-4. IF FIELD-FF = FIELD-EE WRITE FILE-3-RECORD FROM SORT-RECORD GO TO PARAGRAPH-3 ELSE MOVE FIELD-EE TO FIELD-EEE MOVE FIELD-FF TO FIELD-FFF MOVE FIELD-AA TO FIELD-AAA MOVE FIELD-BB TO FIELD-BBB MOVE SPACES TO FILLER-A, FILLER-B WRITE FILE-2-RECORD. GO TO PARAGRAPH-3. PARAGRAPH-4. EXIT. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 18 Programmaufbau IDENTIFICATION DIVISION Hierarchische Gliederung: Division - Section - Paragraph vier Abteilungen: Name des Programms Allgemeine Programminformationen Optionale Zusatzangaben ohne semantische Bedeutung IDENTIFICATION DIVISION Verfasser, Datum, usw. ENVIRONMENT DIVISION Konfiguration, EA-Steuerung: Zuordnung externe-interne Datei DATA DIVISION Dateivereinbarungen, EA-Puffer, Datenvereinbarungen PROCEDURE DIVISION Anweisungen. Abschnitts-/Absatznamen als Sprungziele. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 19 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 20

ENVIRONMENT DIVISION ENVIRONMENT DIVISION Konfigurationsabschnitt: Übersetzung (Quell-Ziel-System), Internationalisierung (Dezimaltrenner, Sortierangaben, etc.) Ein-Ausgabe-Informationen: Zuordnung externe (physikalische) Dateien - interne (logische) Dateien Vereinbarung der EA-Puffer ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. Atari ST OBJECT-COMPUTER. Cray SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. SELECT datafile ASSIGN TO Data.dat Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 21 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 22 Datei (Data-Set) DATA DIVISION zuordnung ::= SELECT intern ASSIGN TO system [organisation] [zugriff] [schlüssel] [status] organisation ::= ORGANIZATION IS (SEQUENTIAL RELATIVE INDEXED) zugriff ::= ACCESS IS (SEQUENTIAL RELATIVE INDEXED) schlüssel ::= RELATIVE KEY IS ganzzahlfeld RECORD KEY IS feld [ALTERNATIVE RECORD KEY IS feld [ WITH DUPLICATES ] ]* FILE SECTION Persistente Daten und Dateistrukturen WORKING-STORAGE SECTION Temporäre Daten LINKAGE SECTION Formale Parameter status ::= FILE STATUS IS zweizeichenfeld Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 23 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 24

Typkonzept Satznummern Skalare Werte: datenelement ::= sn datenname PICTURE IS art [ USAGE IS format ] [ VALUE IS literal ] Statische Reihungen (Tabellen): tabelle ::= datenelement OCCURS ganze zahl [ASCENDING KEY IS[datenname] + ] [INDEXED BY datenname] zugriff ::= tabellenname ( ganze zahl ) Records (Datensätze): satz ::= [ datenelement ] * zugriff ::= datenname [. datenname ]* Definieren Ebene in Datensätzen Besondere Satznummern: Ebenen-Nummern 66 Umbenennungen (renames), 77 Unabhängige Datenelemente, 88 Bedingungen Reihungen maximal dreistufig Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 25 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 26 Datenart Numerische Typen PICTURE IS (Kurzform PIC) X - Alphanumerisch A - Alphabetisch 9 - Numerisch Anzahl Stellen definiert durch PICTURE IS [S](9* 9(zahl)) [V(9* 9(zahl))] USAGE art art ::= BINARY COMPUTATIONAL-1 COMPUTATIONAL-2 DISPLAY PACKED-DECIMAL Beispiel: 01 bezeichner PIC S99V99 1. Klammerung, z.b. X(3) Wiederholung, z.b. XXX Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 27 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 28

Druckformate DATA DIVISION Beispiel 01 bezeichner PIC Z99.99CB SIGN LEADING Dezimalpunkt oder -Komma:., Keine Nullen vorn: Z Soll und Haben: CB DB Formate gehören zum Datenelement nicht zu EA Operationen FILE SECTION. FD interne-datei-1. 01 daten-satz-name PIC 02 FD interne-datei-2. WORKING-STORAGE SECTION. 01 daten-satz-name-1 PIC 02 01 daten-satz-name-2 PIC LINKAGE SECTION. 01 daten-satz-name PIC Ebene 02 bedeutet Unterverbund, Ebene 03 Unter-Unterverbund, usw. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 29 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 30 PROCEDURE DIVISION Bildschirm Ein- und Ausgabe Anweisungsteil Anweisungen bilden Sätze Sätze bilden Paragraphen Paragraphen bilden Abschnitte Prozedur - Oberbegriff für Abschnitte und Paragraphen Paragraph- und Abschnittsbezeichner: Marken und Untermarken ausgabe ::= DISPLAY ( literal datenname ) eingabe ::= ACCEPT datenname Beispiel: WORKING-STORAGE SECTION. 01 zeile PIC X(80) VALUE String. PROCEDURE DIVISION. DISPLAY zeile, ACCEPT zeile, DISPLAY zeile. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 31 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 32

Eingabemasken Perform-Anweisung, Unterprogramme, Schleifen DATA DIVISION. WORKING-STORAGE SECTION. 01 kunde. 02 name PIC X(30). 02 vorname PIC X(30). 02 adresse PIC X(100). SCREEN SECTION. 01 eingabemaske. 02 blank screen. 02 line 1 column 5 value Name:. 02 line 1 column 15 PIC X(30) to name. 02 line 2 column 5 value Vorname:. 02 line 2 column 15 PIC X(30) to vorname. 02 line 3 column 5 value Adresse:. 02 line 3 column 15 PIC X(100) to adresse. PROCEDURE DIVISION: display eingabemaske. accept eingabemaske. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 33 perform ::= PERFORM wiederholung [ anweisung Marken ]* END-PERFORM wiederholung ::= (ganze zahl datenname ) TIMES Beispiel: PROCEDURE DIVISION. PERFORM 100 TIMES ACCEPT zeile, DISPLAY zeile END-PERFORM. Beispiel: PROCEDURE DIVISION. PERFORM 100 TIMES PARAGRAPH-1 THRU PARAGRAPH-7 END-PERFORM. PARAGRAPH-1. PARAGRAPH-7. also: perform-anweisung erlaubt Zählschleife und Unterprogrammaufruf (parameterlos, keine Rekursion) Problem: wie unterscheidet man Absätze, die normal durchlaufen werden von Unterprogrammrümpfen? Keine Unterscheidung in der Sprache. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 34 While Schleife PERFORM - Anweisung perform ::= PERFORM abbruch [ anweisung ]* END-PERFORM abbruch ::= WITH TEST ( BEFORE AFTER) UNTIL bedingung Beispiel: PERFORM WITH TEST AFTER zeile= END ACCEPT zeile, DISPLAY zeile END-PERFORM. perform ::= PERFORM prozedurname [THRU prozedurname][wiederholung abbruch] Beispiel: BEGIN. PERFORM EINLESEN THRU AUSGEBEN END-PERFORM. EINLESEN. ACCEPT zeile BERECHNEN. * Mach irgendetwas. AUSGEBEN. DISPLAY zeile, STOP RUN. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 35 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 36

Zuweisung Beispiel zuweisung ::= MOVE ( literal datenname ) TO datenname zuweisung ::= MOVE CORRESPONDING datensatz-name-1 TO datensatzname-2 CORRESPONDING: gleichbezeichnete Felder der Sätze Beispiel: WORKING-STORAGE SECTION. 01 englisches-datum. 02 monat PIC 99. 02 FILLER PIC X VALUE ''/''. 02 tag PIC 99. 02 FILLER PIC X VALUE ''/''. 02 jahr PIC 99. 01 deutsches-datum. 02 tag PIC 99. 02 FILLER PIC X VALUE ''.''. 02 monat PIC 99. 02 FILLER PIC X VALUE ''.''. 02 jahr PIC 99. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 37 PROCEDURE DIVISION. ACCEPT englisches-datum.monat, ACCEPT englisches-datum.tag, ACCEPT englisches-datum.jahr. MOVE CORRESPONDING englisches-datum TO deutsches-datum. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 38 Arithmetische Operationen Addition und Subtraktion compute ::= COMPUTE [ datenname ]* = arithmetischer ausdruck mit Operatoren + - * / ** Aber: Kaufleuten kann man Zuweisungen und Ausdrücke der Form a := a*b+c nicht zumuten (Ansicht von 1960). daher Lösung wie auf den nächsten Seiten addition ::= ADD [literal datenname ] + TO [datenname ] + [ GIVING datenname ]* addition ::= ADD CORRESPONDING datensatz-name-1 TO datensatz-name-2 subtraktion ::= SUBTRACT [literal datenname ] + FROM [datenname ] + [ GIVING datenname ]* subtraktion ::= SUBTRACT CORRESPONDING datensatz-name-1 FROM datensatz-name-2 ADD GIN TO VERMOUTH GIVING MARTINI Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 39 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 40

Multiplikation und Division Datei Ausgabe multiplikation ::= MULTIPLY [literal datenname] + BY [datenname ] + [ GIVING datenname ]* multiplikation ::= MULTIPLY CORRESPONDING datensatz-name-1 BY datensatz-name-2 division ::= DIVIDE (literal datenname) (BY INTO) datenname [GIVING datenname]* [ REMAINDER datenname] öffenen ::= OPEN interner dateiname [ rechte ] schließen ::= CLOSE interner dateiname schreiben ::= WRITE datensatzname [ FROM datenname ] [ INVALID KEY anweisungen ] [ NOT INVALID KEY anweisungen ] [ END-WRITE ] überschreiben ::= REWRITE [ END-REWRITE ] löschen ::= DELETE dateiname RECORD [ END-DELETE ] Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 41 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 42 Datei Eingabe Bedingungen lesen ::= READ dateiname RECORD [ INTO datenname ] [ KEY IS schlüssel ] [ INVALID KEY anweisungen ] [ NOT INVALID KEY anweisungen ] [ AT END anweisungen ] [ NOT AT END anweisungen ] [ END-READ ] positionieren ::= START dateiname RECORD [ KEY IS (EQUAL TO GREATER THAN ) schlüssel [ END-START ] if ::= IF bedingung THEN anweisungen [ ELSE anweisungen ] [ END-IF ] bedingung ::= ( literal datenname ) vergleichsausdruck ( literal datenname ) bedingung ::= datenname IS klasse bedingung ::= bedingungsname case ::= EVALUATE ausdruck [ ALSO ausdruck ]* [WHEN ausdruck [ALSO ausdruck]* anweisungen]* [WHEN OTHERS anweisungen ] [END-EVALUATE] Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 43 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 44

Beispiel Weitere Steuerstrukturen 01 FAMILIENSTAND PIC 9 88 LEDIG VALUE 1. 88 VERHEIRATET VALUE 2 sprung ::= GO TO prozedurname [ [ prozedurname ]* DEPENDING ON datenname ] ende ::= STOP RUN Unterprogramme - IF LEDIG THEN IF FAMILIENSTAND = 1 THEN SET LEDIG TO TRUE. nicht im ursprünglichen Standard. Später ohne Parameter. Immer noch ohne Rekursion. Formale Parameter in der LINKAGE-SECTION vereinbart, Kein Speicherplatz vorgesehen. Statische Bindung und Speicherzuteilung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 45 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 46 Unterprogramme Tabellen verarbeiten aufruf ::= CALL (unterprogramm datenname) [ USING [[übergabe] aktuelle parameter]*] übergabe ::= BY REFERENCE BY CONTENT BY CONTENT LENGTH definition ::= PROCEDURE-DIVISION [ formaler parameter ]* Identification division. program-id. Tabellen-demo. Environment division. data division. working-storage section. 01 kontakt-tabelle. 02 kontakt occurs 100 ascending key is name vorname indexed by kontakt-idx. 03 name pic X(30). 03 vorname pic X(30). 03 kontakt-art pic 9. 88 interner-kontakt value 1. 88 externer-kontakt value 2. 03 adresse occurs 3. 04 strasse pic X(30). 04 plz pic XXXXX. 04 ort pic X(30). 01 temporaere-felder. 02 such-ende pic 9. 88 suche-lauft value 0. 88 suche-beendet value 1. 03 such-name pic X(30). Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 47 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 48

Tabellen verarbeiten, Fortsetzung procedure division. move "Müller" to such-name. perform suche-alle-passenden. perform suche-alle-passenden-schneller. suche-alle-passenden section. set suche-laeuft to true. set kontakt-idx to 1. perform until suche-beendet. search kontakt. at end set suche-beendet to true. when such-name = name perform gefunden. end search. exit. suche-alle-passenden-schneller section. set suche-laeuft to true. set kontakt-idx to 1. perform until suche-beendet. search all kontakt. at end set suche-beendet to true. when such-name = name perform gefunden. end search. exit. gefunden section. display "Gefunden: " name "," vorname. exit. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2003/04 49