# 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

Een programma in COBOL wordt ingedeeld in 4 delen of divisies.
COBOL-code: Indeling
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

## Hello World! (DISPLAY)

    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
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

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
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)

Variabelen worden in COBOL velden genoemd en gedeclareerd in de DATA DIVISION. Meer bepaald bij WORKING-STORAGE SECTION.

### Numerieke velden

COBOL-code: Numerieke velden
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 12$^{de}$ 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
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

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
Ook hier kan VALUE worden gebruikt, alleen moet de inhoud nu tussen aanhalingstekens komen ("string" of 'string').
COBOL-code: Alfanumeriek velden

## Een simpel programma

COBOL-code: Getal
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

## ACCEPT

    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
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

## MOVE

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

## Decimale getallen

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
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
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

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
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.
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
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.