Programmeren in COBOL/Bewerkingen/Inleiding
Dit is de inleiding van Programmeren in COBOL. COBOL is niet hoofdlettergevoelig dus een "a" betekent hetzelfde als een "A". Voor de overzichtelijkheid wordt aangeraden om bepaalde regels te volgen, sleutelwoorden(syntax) worden in hoofdletters geschreven en velden(variabelen) met kleine letters. Natuurlijk is de inhoud van een veld wel hoofdlettergevoelig.
Indeling van een programma
[bewerken]Een programma in COBOL wordt ingedeeld in 4 delen of divisies.
COBOL-code: Indeling
IDENTIFICATION DIVISION. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION.
Met de volgende betekenis:
IDENTIFICATION DIVISION geeft informatie over het programma. Bijvoorbeeld wat de naam is van het programma of wie het gemaakt heeft.
De ENVIRONMENT DIVISION is voornamelijk voor het gebruiken van bestanden door het programma.
In de DATA DIVISION komen al de verschillende soorten velden(variabelen) die het programma gebruikt.
In de PROCEDURE DIVISION staat de werkelijke programmacode.
Let op: de divisies moeten worden geschreven vanaf de 8ste positie. M.a.w. als je dit zou typen in een editor moet je voor je bijvoorbeeld IDENTIFICATION DIVISION typt, 7 spaties laten. Dit gebruik stamt nog uit de tijd toen COBOL op papier werd geschreven. Achter deze divisies moet een punt komen. Wat ook belangrijk is om te weten, is dat alleen IDENTIFICATION DIVISION en PROCEDURE DIVISION verplicht zijn in een programmacode. De andere twee moet je alleen schrijven als je het werkelijk gebruikt.
COBOL-code: Positie
1 2 3 4 5 6 7 123456789012345678901234567890123456789012345678901234567890123456789012 IDENTIFICATION DIVISION.
Hello World! (DISPLAY)
[bewerken]- Zie ook DISPLAY voor meer informatie.
Laten we ons eerste programma schrijven en het traditionele "Hello World!" op het scherm tonen.
COBOL-code: Hello World
IDENTIFICATION DIVISION. PROGRAM-ID. HelloWorld. PROCEDURE DIVISION. hoofd. DISPLAY "Hello World!" STOP RUN .
Zoals eerder werd gezegd geeft IDENTIFICATION DIVISION informatie over het programma zelf. PROGRAM-ID. (let op de punt) is een onderdeel van deze divisie, die geeft aan hoe het programma heet. Na een naam te hebben gegeven, moet ook een punt komen.
Programma's kunnen worden ingedeeld in deelprogramma's (zie hoofdstuk deelprogramma's). "Hoofd." kun je in dit geval vergelijken met "main()" in bijvoorbeeld java. Dit geeft gewoon aan dat dit het belangrijkste stukje code is van het programma. Je kunt "hoofd." echter vervangen door een andere naam.
De werkelijke programmacode wordt pas geschreven vanaf de 12de positie.
DISPLAY laat iets zien op het scherm. Wil je zoals in dit programma gewoon tekst tonen, dan moet je de tekst tussen aanhalingstekens plaatsen ("").
STOP RUN. (let op de punt) geeft aan dat je aan het einde van het programma zit.
Commentaar
[bewerken]Het zou natuurlijk handig zijn als je commentaar kon plaatsen in een programma. Daarmee kun je later zien wat bijvoorbeeld bepaalde delen van een programma doen.
COBOL-code: Commentaar
1 2 3 4 5 6 7 123456789012345678901234567890123456789012345678901234567890123456789012 *Dit is commentaar
Om commentaar te vermelden, moet je gebruik maken van een asterisk (*) op de 7de positie (dus voor de asterisk moet je 6 spaties laten). De hele regel wordt dan gezien als commentaar.
Velden(variabelen)
[bewerken]Variabelen worden in COBOL velden genoemd en gedeclareerd in de DATA DIVISION. Meer bepaald bij WORKING-STORAGE SECTION.
Numerieke velden
[bewerken]COBOL-code: Numerieke velden
DATA DIVISION. WORKING-STORAGE SECTION. 77 getal PIC 9 VALUE 1.
Dit is een voorbeeld van een numeriek veld. Een veld begint op de 8ste positie. Het begint met het getal 77. 77 is het zogenaamde niveaunummer. Nu uitleggen wat het is zou zinloos zijn, aangezien dit nog maar de basis is. Naast 77 zou je ook 01 kunnen gebruiken. Het niveaunummer wordt gevolgd door de naam die je wilt geven aan het veld. Vaak wordt de naam van het veld vanaf de 12de positie geschreven. Daarna wordt het gevolgd door PIC(of PICTURE) dat bepaalt welk soort veld het is. De "9" staat voor een numeriek veld. Het aantal negens bepaalt hoeveel cijfers het veld maximum mag bevatten, 10 keer een 9 schrijven betekent dus een numeriek veld van 10 tekens lang. Als je een waarde aan een veld wilt toevoegen, kun je VALUE gebruiken, maar dit is niet verplicht. Vergeet opnieuw de punt op het einde niet.
COBOL-code: Numerieke velden
DATA DIVISION. WORKING-STORAGE SECTION. 77 getal PIC 9(10).
In plaats van bijvoorbeeld "77 getal PIC 9999999999." om de lengte te bepalen, kan je evengoed gewoon "PIC 9(10)" schrijven om aan te geven dat het getal uit 10 cijfers zal bestaan. Beide hebben hetzelfde effect.
Als je bijvoorbeeld het getal 7 in een variabele zet met PIC 999 dan krijg je op het scherm "007" te zien. Dus waar geen getal komt wordt 0 geplaatst. Later zullen we zien hoe je dit kunt wegwerken(zie hoofdstuk editing).
Alfanumerieke velden
[bewerken]Dit is natuurlijk te vergelijken met een String in de programmeertaal Java. Je kunt zo'n veld declareren met PIC X. De X geeft opnieuw het soort variabele en zijn maximale lengte aan.
COBOL-code: Alfanumeriek velden
DATA DIVISION. WORKING-STORAGE SECTION. 77 tekst PIC X(10).
Ook hier kan VALUE worden gebruikt, alleen moet de inhoud nu tussen aanhalingstekens komen ("string" of 'string').
COBOL-code: Alfanumeriek velden
DATA DIVISION. WORKING-STORAGE SECTION. 77 tekst PIC X(13) value "dit is tekst!".
Een simpel programma
[bewerken]COBOL-code: Getal
IDENTIFICATION DIVISION. PROGRAM-ID. getal. DATA DIVISION. WORKING-STORAGE SECTION. 77 tekst PIC X(18) VALUE "Dit is een getal:". 77 getal PIC 9(3) VALUE 7. PROCEDURE DIVISION. hoofd. DISPLAY tekst " " getal STOP RUN.
Dit is een getal: 007
Je kunt dus makkelijk 2 velden in dezelfde DISPLAY tonen. Dit zorgt er wel voor dat de twee velden naast elkaar komen te staan. Om een spatie tussen de twee velden te hebben, kun je gewoon " " doen. Wil je dat ze onder elkaar komen dan zet je ze gewoon in 2 DISPLAY’s.
COBOL-code: DISPLAY
PROCEDURE DIVISION. hoofd. DISPLAY tekst DISPLAY getal STOP RUN.
Dit is een getal: 007
ACCEPT
[bewerken]- Zie ook ACCEPT voor meer informatie.
Het zou natuurlijk leuk zijn moest de gebruiker input kunnen geven. Dit gebeurt via ACCEPT, na ACCEPT moet je het veld geven waarin de gebruiker iets voor moet ingeven.
COBOL-code: ACCEPT
IDENTIFICATION DIVISION. PROGRAM-ID. getal. DATA DIVISION. WORKING-STORAGE SECTION. 77 getal PIC 9(3). PROCEDURE DIVISION. hoofd. DISPLAY "Geef een getal:" ACCEPT getal DISPLAY "Dit is uw getal: " getal STOP RUN.
Geef een getal: 7 Dit is uw getal: 007
Het vreemde aan ACCEPT is dat wanneer de gebruiker iets ingegeven heeft, de computer een biep-geluid geeft. Om dit te vermijden kan je NO BEEP gebruiken.
COBOL-code: NO BEEP
ACCEPT getal NO BEEP
MOVE
[bewerken]Met behulp van MOVE kun je makkelijk data overbrengen van het ene veld naar een andere. Maar je kunt ook gewoon een getal of tekst via MOVE naar een veld overbrengen.
COBOL-code: MOVE
PROCEDURE DIVISION. hoofd. ACCEPT input NO BEEP MOVE input TO output MOVE 6 TO getal MOVE "Dit is tekst" TO tekst STOP RUN .
Decimale getallen
[bewerken]Het stukje over numerieke velden ging alleen over gehele getallen en dus geen decimale. In COBOL moet je als je een decimaal getal wilt gebruiken dat ook zo declaren.
COBOL-code: Decimale getallen
DATA DIVISION. WORKING-STORAGE SECTION. 77 getal PIC 99V9. PROCEDURE DIVISION. hoofd. DISPLAY "Geef een getal:" ACCEPT getal NO BEEP DISPLAY "Hier is uw getal: " getal STOP RUN .
De V na PIC geeft aan waar je de decimale punt wilt hebben. Als je een decimaal getal wilt ingeven, moet je een punt(.) gebruiken en geen komma(,). Dit is omdat COBOL ontwikkeld is in Amerika, waar een decimaal getal wordt aangegeven met een punt. Als je het getal echter toont op het scherm, komt er geen punt te staan. De V is alleen voor het inlezen van een getal en om er mee te rekenen. Wil je toch een punt hebben, dan moet je een extra variabele declareren (zie hoofdstuk editing).
COBOL-code: Decimale getallen
DATA DIVISION. WORKING-STORAGE SECTION. 77 invoer PIC 99V9. 77 uitvoer PIC 99.9. PROCEDURE DIVISION. hoofd. DISPLAY "Geef een getal:" ACCEPT invoer NO BEEP MOVE invoer TO uitvoer DISPLAY "Hier is uw getal:" DISPLAY uitvoer STOP RUN.
Het veld "uitvoer" zal gebruikt worden om het op het scherm te laten zien. Het verschil is dat de V vervangen werd door een punt. Bij dit veld moet je de inhoud kopiëren vanuit het veld "getal" door middel van MOVE.
Negatieve getallen
[bewerken]Er geldt ook iets gelijkaardigs voor negatieve getallen, alleen is het hier erger. Als je negatieve getallen wilt gebruiken, moet je die ook eerst declareren.
COBOL-code: Negatieve getallen
DATA DIVISION. WORKING-STORAGE SECTION. 77 getal PIC S999. PROCEDURE DIVISION. hoofd. DISPLAY "geef een getal" ACCEPT getal NO BEEP DISPLAY " " DISPLAY getal STOP RUN.
Als je dus een negatief getal wilt, moet je na PIC S999 zetten. S betekent sign (teken) en geeft aan dat het een negatief getal mag zijn. Dit geeft echter een probleem, zoals hieronder te zien is in de schermtekst als je het programma uitvoert.
Geef een getal -888 88Q
88Q is dus niet het getal dat we hebben ingegeven. Hier kun je echter perfect mee rekenen, maar zoals bij een decimaal getal moet je er iets speciaal mee doen. Je hebt weer een extra veld nodig.
COBOL-code: Negatieve getallen
77 uitvoer PIC -999.
De "-" geeft aan waar je het teken wilt (zie hoofdstuk Editing). Opgelet, dit betekent niet dat er altijd een - zal staan; bij een positief getal zal er geen teken staan. Gebruik je daarentegen PIC +999 dan staat er altijd een teken, hetzij +, hetzij -, afhankelijk van de inhoud. Gebruik opnieuw MOVE om de inhoud van getal naar uitvoer te kopiëren.