Programmeren in COBOL/Bewerkingen/Berekeningen
Dit is een hoofdstuk waar je kunt leren hoe je iets moet berekenen in COBOL.
COMPUTE
bewerken- Zie ook COMPUTE voor meer informatie.
COMPUTE is de makkelijkste manier waarmee je iets kunt berekenen in COBOL. De volgende delen van deze pagina zijn hierdoor eigenlijk onnodig, maar het kan best leuk zijn om te weten dat je het ook anders kunt doen. Rekenen wordt gedaan met +, -, *, /, **(machten). Om die tekens te gebruiken, moet je ze tussen 2 spaties zetten. Nooit bijvoorbeeld "1+1" maar altijd 1 + 1.
COBOL-code: COMPUTE
COMPUTE uitkomst = getal + 2
De variabelen waar de uitkomst moet komen te staan aan de linkerkant van de "=" de berekening staat altijd aan de rechterkant. "=" lees je dus best als "wordt" (en niet "is"). Het is mogelijk om af te ronden in COBOL dankzij ROUNDED: Een 1, 2, 3 en 4 worden naar beneden afgerond; 5, 6, 7, 8 en 9 worden naar boven afgerond: Stel dat de uitkomst 4.5 is, maar het komt terecht in een variabele met PIC 9 die alleen 4 opslaat. Een wetenschappelijke/wiskundige afronding naar boven kan je uitvoeren met ROUNDED.
COBOL-code: COMPUTE
COMPUTE uitkomst ROUNDED = getal / 2
Ook kun je de uitkomst in meerdere variabelen zetten en kun je de ene niet laten afronden en de andere dan weer wel.
COBOL-code: COMPUTE
COMPUTE uitkomst uitkomst2 ROUNDED = 5 / (getal + 2 - getal2) * .5 ** 25
Wanneer er een complexe berekening wordt gedaan, hebben bepaalde tekens voorrang op andere, net zoals in de wiskunde. Haakjes hebben altijd voorrang. Daarna komt **, gevolgd door * en / (evenwaardig) en tenslotte + en -. Gelijk(waardig)e tekens worden van links naar rechts uitgevoerd.
Wortel
bewerkenHoewel er geen teken bestaat om een wortel te doen met COMPUTE, is er toch een simpele manier om het te doen. Er bestaat namelijk een alternatieve notatie voor een wortel.
Links staat een gewone vierkantswortel en rechts staat 2 tot de 1/2 macht. Die zijn namelijk gelijk. De algemene notatie is:
Dit maakt dat je een wortel kan berekenen door het volgende te doen.
COBOL-code: COMPUTE
COMPUTE uitkomst = a ** (1 / n)
ADD
bewerken- Zie ook ADD voor meer informatie.
Naast COMPUTE zijn er nog ander manieren om te rekenen. Het enige voordeel dat deze manier heeft is dat het zeer logisch kan overkomen.
COBOL-code: ADD
ADD verkoop TO omzet
Hier wordt dan de inhoud van verkoop toegevoegd aan de inhoud van omzet. Het is mogelijk om met meerdere variabelen bij ADD te gebruiken.
COBOL-code: ADD
ADD getal1 getal2 TO getal3 getal4 ROUNDED
Getal1 en getal2 worden zowel bij getal3 als bij getal4 opgeteld. Net zoals COMPUTE kun je gebruik maken van ROUNDED. Het woord GIVING zorgt dat het resultaat in een andere variabele gezet wordt.
COBOL-code: ADD
ADD prijs TO btw GIVING totaleprijs afgerondeprijs ROUNDED
SUBTRACT
bewerken- Zie ook SUBTRACT voor meer informatie.
COBOL-code: SUBTRACT
SUBTRACT 1 FROM getal
SUBTRACT verschilt niet erg van ADD: alleen wordt hier FROM gebruikt in de plaats van TO. Ook hier kan je GIVING en ROUNDED gebruiken.
COBOL-code: SUBTRACT
SUBTRACT 1 getal1 FROM getal2 GIVING getal3 getal4 ROUNDED
Waar je wel voor moet opletten is de declaratie van de variabelen. Als je SUBTRACT doet, kun je een negatief getal krijgen. Daarom is het best dat je S gebruikt bij de variabelen, bijvoorbeeld PIC S999. (data editing).
MULTIPLY
bewerken- Zie ook MULTIPLY voor meer informatie.
COBOL-code: MULTIPLY
MULTIPLY getal1 BY getal2 getal3 ROUNDED
Hier worden getal2 en getal3 vermenigvuldigd met getal1. Ook hier kun je ROUNDED en GIVING gebruiken.
COBOL-code: MULTIPLY
MULTIPLY getal1 BY getal2 GIVING getal3 getal4 ROUNDED
DIVIDE
bewerken- Zie ook DIVIDE voor meer informatie.
COBOL-code: DIVIDE
DIVIDE getal1 INTO getal2 getal3 ROUNDED
Opgelet, hier worden getal2 en getal3 gedeeld door getal1 (niet omgekeerd). Hier kun je ook ROUNDED en GIVING gebruiken.
COBOL-code: DIVIDE
DIVIDE getal1 INTO getal2 GIVING getal3 getal4 ROUNDED
Naast DIVIDE ... INTO kun je ook DIVIDE ... BY gebruiken.
COBOL-code: DIVIDE
DIVIDE getal1 BY getal2 GIVING getal3 getal4 ROUNDED
Dit zorgt ervoor dat de berekening wordt omgedraaid. getal 1 zal worden gedeeld door getal2 in de plaats van getal2 door getal1. Je kunt bij DIVIDE ook de rest opslaan via REMAINDER.
COBOL-code: DIVIDE
DIVIDE getal1 BY getal2 GIVING getal3 REMAINDER getal4
Hier zal de rest worden opgeslagen in getal4.
Speciale gevallen
bewerkenHoewel de notatie ingewikkeld is, kan met bovenstaande operaties bondiger programmacode geschreven worden. Onderstaande codelijnen zijn equivalent aan elkaar:
COBOL-code: Speciale gevallen
ADD k l m TO a b COMPUTE a = a + k + l + m COMPUTE b = b + k + l + m SUBTRACT k l m FROM a b COMPUTE a = a - ( k + l + m ) COMPUTE b = b - ( k + l + m ) MULTIPLY p BY q GIVING r s COMPUTE r s = p * q DIVIDE 15 BY k GIVING l REMAINDER m COMPUTE l = 15 / k COMPUTE m = 15 - k * l
Foutmeldingen kunnen opgevangen worden met ON SIZE ERROR. Als er de uitkomst niet in de PIC (PICTURE) past, kan een subroutine opgeroepen worden.
COBOL-code: Speciale gevallen
COMPUTE a = b * c ON SIZE ERROR PERFORM subroutine END-COMPUTE MULTIPLY b BY c GIVING a ON SIZE ERROR PERFORM subroutine END-COMPUTE
Conclusie
bewerkenCOMPUTE is de eenvoudigste manier om berekeningen uit te voeren. Het gaat veel sneller en je kunt snel complexe berekeningen uitvoeren zonder al teveel programmeerwerk. Wil je toch ADD, SUBTRACT, MULTIPLY en DIVIDE gebruiken dan is het aangeraden om goed te oefenen.