Programmeren in COBOL/Bewerkingen/Berekeningen

Uit Wikibooks
Naar navigatie springen Naar zoeken springen

Programmeren in COBOL

Inhoudsopgave
  1. Inleiding Zeer goed ontwikkeld. Revisiedatum: 24 oktober 2007 (Oef Zeer goed ontwikkeld. Revisiedatum: 24 oktober 2007 )
  2. Berekeningen Zeer goed ontwikkeld. Revisiedatum: 22 oktober 2007 (Oef Redelijk ontwikkeld. Revisiedatum: 26 oktober 2007 )
  3. IF en lussen Zeer goed ontwikkeld. Revisiedatum: 26 oktober 2007 (Oef In ontwikkeling. Revisiedatum: 25 oktober 2007 )
  4. Deelprogramma's Zeer goed ontwikkeld. Revisiedatum: 21 oktober 2007 (Oef Nog vrijwel niets. Revisiedatum: 20 november 2007 )
  5. Werken met tekst In ontwikkeling. Revisiedatum: 21 oktober 2007 (Oef Nog vrijwel niets. Revisiedatum: 20 november 2007 )






Dit is een hoofdstuk waar je kunt leren hoe je iets moet berekenen in COBOL.

COMPUTE[bewerken]

Next.svg  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[bewerken]

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

Next.svg  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]

Next.svg  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]

Next.svg  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]

Next.svg  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[bewerken]

Hoewel 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 b = a + 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 = 5 / k
           COMPUTE m = 5 - 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[bewerken]

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

Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.