Teil 5 COBOL. COmmon Business Oriented Language 60

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

Programmieren mit COBOL

Vorwort 11 1 Einleitung Überblick Hardwareausstattung Softwarebausteine Programmentwicklung 19

COBOL Programmierte Unterweisung

Common Business Oriented Language. Teil 1 - Einführung

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

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

4.Grundsätzliche Programmentwicklungsmethoden

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

DO 8 I = 1, 100 ITOTAL

Data exchange with Prosonic Flow 93T

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

PeakTech Zeitprogramm erstellen über Excel - Beispiel / Timed programs with Excel Example

Im Fluss der Zeit: Gedanken beim Älterwerden (HERDER spektrum) (German Edition)

Die Datenmanipulationssprache SQL

Installation MySQL Replikationsserver

p^db=`oj===pìééçêíáåñçêã~íáçå=

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

Generischer Excel-Upload

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL USER GUIDE June 2016

Das Zeitalter der Fünf 3: Götter (German Edition)

How-To-Do. Hardware Configuration of the CC03 via SIMATIC Manager from Siemens

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Restschmutzanalyse Residual Dirt Analysis

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

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

Hallo Jessi, wenn ich das. DATA aufg3_b; vari='<.0001'; IF &wil_two_test. le vari THEN pwert=0.0001;

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

COBOL Grundlagen. Übungen zur Schulung

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

p^db=`oj===pìééçêíáåñçêã~íáçå=

Word-CRM-Upload-Button. User manual

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

~ ~

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2

DIBELS TM. German Translations of Administration Directions

How-To-Do. OPC-Server with MPI and ISO over TCP/IP Communication. Content. How-To-Do OPC-Server with MPI- und ISO over TCP/IP Communication

Kurzinformation Brief information

August Macke Abschied, 1914 Museum Ludwig, Köln

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

The process runs automatically and the user is guided through it. Data acquisition and the evaluation are done automatically.

Duell auf offener Straße: Wenn sich Hunde an der Leine aggressiv verhalten (Cadmos Hundebuch) (German Edition)

Abstrakte C-Maschine und Stack

VDA-Empfehlung 4905 Lieferabruf / VDA 4905 delivery schedule

Modul 122 VBA Scribt.docx

A.1 reservierte COBOL-Wörter Anhang

1. Definition. 2. Interne Speicherung der Zeichenketten. 3. Vereinbarung von Zeichenketten

Guidance Notes for the eservice 'Marketing Authorisation & Lifecycle Management of Medicines' Contents

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Übung 3: VHDL Darstellungen (Blockdiagramme)

Includes/ Programme generieren

EXCEL VBA Cheat Sheet

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

Zeilen in SAS-Datensatz einfügen

Standardtext ins PDF-Format konvertieren

Wirkung Addiert den Inhalt eines numerischen Datenobjekts dobj1 zum Inhalt eines numerischen Datenobjekts dobj2 und weist das Ergebnis dobj2 zu.

Wer bin ich - und wenn ja wie viele?: Eine philosophische Reise. Click here if your download doesn"t start automatically

Unified-E Standard WebHttp Adapter

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

1 Klassen anlegen und Objekte erzeugen

How-To-Do. Hardware Configuration of the CPU 317NET with external CPs on the SPEED Bus by SIMATIC Manager from Siemens

Vorlesung Objektorientierte Programmierung Klausur

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Wie man heute die Liebe fürs Leben findet

SAMPLE EXAMINATION BOOKLET

DHBW Stuttgart, Informatik, Advanced SW-Engineering Aug Programmierung

Getting started with MillPlus IT V530 Winshape

SQL structured query language

Assembler (NASM) Crashkurs von Sönke Schmidt

Prozedurale Datenbank- Anwendungsprogrammierung

Dateneingabe und Transformation Übersicht

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Konkret - der Ratgeber: Die besten Tipps zu Internet, Handy und Co. (German Edition)

Killy Literaturlexikon: Autoren Und Werke Des Deutschsprachigen Kulturraumes 2., Vollstandig Uberarbeitete Auflage (German Edition)

Ingenics Project Portal

Algorithms for graph visualization

EVANGELISCHES GESANGBUCH: AUSGABE FUR DIE EVANGELISCH-LUTHERISCHE LANDESKIRCHE SACHSEN. BLAU (GERMAN EDITION) FROM EVANGELISCHE VERLAGSAN

Der Adapter Z250I / Z270I lässt sich auf folgenden Betriebssystemen installieren:

Aus FanLiebe zu Tokio Hotel: von Fans fã¼r Fans und ihre Band

Agenda. FRA Was ist das? Warum sollte die FRA genutzt werden? FRA INIT Paramter Verzeichnisstruktur (Beispiel) Überwachung der Flash Recovery Area

DAS ZUFRIEDENE GEHIRN: FREI VON DEPRESSIONEN, TRAUMATA, ADHS, SUCHT UND ANGST. MIT DER BRAIN-STATE-TECHNOLOGIE DAS LEBEN AUSBALANCIEREN (GE

1 Klassen anlegen und Objekte erzeugen

Q-App: Backweigher light V3.0

Die Bedeutung neurowissenschaftlicher Erkenntnisse für die Werbung (German Edition)

SanStore: Kurzanleitung / SanStore: Quick reference guide

Die Dokumentation kann auf einem angeschlossenen Sartorius Messwertdrucker erfolgen.

Schöpfung als Thema des Religionsunterrichts in der Sekundarstufe II (German Edition)

Reparaturen kompakt - Küche + Bad: Waschbecken, Fliesen, Spüle, Armaturen, Dunstabzugshaube... (German Edition)

Kursbuch Naturheilverfahren: Curriculum der Weiterbildung zur Erlangung der Zusatzbezeichnung Naturheilverfahren (German Edition)

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

R&R. Ges. für Rationalisierung und Rechentechnik mbh. R&R RR-P-508 / ST106-EX1 motor-control unit

Algebraische Spezifikation von Software und Hardware II

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

Tutorium für Fortgeschrittene

Notes. Erläuterungen

Aus FanLiebe zu Tokio Hotel: von Fans fã¼r Fans und ihre Band

Karten aktualisieren Don t Panik

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) dann 1974, 1985, de facto Standard: IBM COBOL Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 1

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 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 2

Sprache ohne Programmierer 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." >> Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 3

Entwurfsprinzipien 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 2002/03 4

ANSI-COBOL-85 Norm 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. Neuer Standard: 2002, enthält unter anderem: object orientation, portable arithmetic, exception handling, native binary data types, recursion, cultural adaptibility, multilingual features, and tailoring for a given local language or culture. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 5

Obligatorische Bausteine 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 2002/03 6

Optionale 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 Quelltext Manipulation: Bibliotheksmodell, Zusammenbinden verschiedener Programme Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 7

Zusätzliche Bausteine Testhilfe: Sprachelemente zur Fehlersuche (z.b. Statusregister) Kommunikation: Datenfernübertragung Segmentierung: Auslagerung einzelner Programmteile zur Laufzeit Report Writer: Listenerstellung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 8

Programmformate 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 Groß-/Kleinbuchstaben äquivalent, Minuszeichen Bestandteil von Bezeichnern Überschriften, Vereinbarungen, Anweisungen abgeschlossen mit Punkt. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 9

Programmaufbau Hierarchische Gliederung: Division - Section - Paragraph vier Abteilungen: 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 2002/03 10

IDENTIFICATION DIVISION Name des Programms Allgemeine Programminformationen Optionale Zusatzangaben ohne semantische Bedeutung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 11

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 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 12

ENVIRONMENT DIVISION 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 2002/03 13

Datei (Data-Set) 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 ] ]* status ::= FILE STATUS IS zweizeichenfeld Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 14

DATA DIVISION FILE SECTION Persistente Daten und Dateistrukturen WORKING-STORAGE SECTION Temporäre Daten LINKAGE SECTION Formale Parameter Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 15

Typkonzept 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 ]* Reihungen maximal dreistufig Satznummern, um Hierarchiestufen in Records zu definieren Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 16

Datenart PICTURE IS (Kurzform PIC) X - Alphanumerisch A - Alphabetisch 9 - Numerisch Anzahl Stellen definiert durch Klammerung, z.b. X(3) Wiederholung, z.b. XXX Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 17

Numerische Typen 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. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 18

Druckformate 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 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 19

DATA DIVISION 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 2002/03 20

PROCEDURE DIVISION 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 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 21

Bildschirm Ein- und Ausgabe 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 2002/03 22

Eingabemasken 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 2002/03 23

Perform-Anweisung, Unterprogramme, Schleifen 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 2002/03 24

While Schleife 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. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 25

PERFORM - Anweisung 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 2002/03 26

Zuweisung 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 2002/03 27

Beispiel 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 2002/03 28

Arithmetische Operationen 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 Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 29

Addition und Subtraktion 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 2002/03 30

Multiplikation und Division 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] Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 31

Datei Ausgabe ö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 2002/03 32

Datei Eingabe 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 ] Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 33

Bedingungen 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 2002/03 34

Beispiel 01 FAMILIENSTAND PIC 9 88 LEDIG VALUE 1. 88 VERHEIRATET VALUE 2... IF LEDIG THEN... IF FAMILIENSTAND = 1 THEN... SET LEDIG TO TRUE. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 35

Weitere Steuerstrukturen sprung ::= GO TO prozedurname [ [ prozedurname ]* DEPENDING ON datenname ] ende ::= STOP RUN Unterprogramme - nicht im ursprünglichen Standard. Später ohne Parameter. Immer noch ohne Rekursion im 85-Standard, im 2002 Standard mit 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 2002/03 36

Unterprogramme aufruf ::= CALL (unterprogramm datenname) [ USING [[übergabe] aktuelle parameter]*] übergabe ::= BY REFERENCE BY CONTENT BY CONTENT LENGTH definition ::= PROCEDURE-DIVISION [ formaler parameter ]* Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 37

Tabellen verarbeiten 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 2002/03 38

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 2002/03 39

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. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 40

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 2002/03 41

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). Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 42

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 2002/03 43

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. Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere ProgrammiersprachenWS 2002/03 44

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 2002/03 45

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 2002/03 47