Programmeren in COBOL/Velden/Groepsvelden en conditie met voorwaardenaam: verschil tussen versies

Uit Wikibooks
Verwijderde inhoud Toegevoegde inhoud
Sephiroth (overleg | bijdragen)
kGeen bewerkingssamenvatting
Sephiroth (overleg | bijdragen)
kGeen bewerkingssamenvatting
Regel 1: Regel 1:
In dit hoofdstuk leer je over groepsvelden en condities met voorwaardenaam. Dit gaat een beetje dieper in op [[Programmeren in COBOL/Inleiding#variabelen|variabelen]].
{{Programmeren in COBOL}}
In dit hoofdstuk leer je over '''groepsvelden en condities met voorwaardenaam'''. Dit gaat een beetje dieper in op [[Programmeren in COBOL/Inleiding#variabelen|variabelen]].
==Groepsvelden==
==Groepsvelden==
Een groepsveld kan gebruikt worden om via één accept data te geven aan meerdere variabelen.
Een groepsveld kan gebruikt worden om via één accept data te geven aan meerdere variabelen.
{{code
|Taal = COBOL
|Titel = Groepsvelden
|Code =
<pre>
<pre>
DATA DIVISION.
DATA DIVISION.
Regel 18: Regel 23:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
In dit programma wordt een getal gelezen en dat getal zal worden opgesplits in 2 getallen. In tegenstelling tot een gewone variabel, waar "77" wordt gebruikt bij het declareren, moet je voor een groepsveld "01" gebruiken dus "01 getal.". ''Getal'' zal dan de naam zijn van het groepsveld. Bij de naam van een groepsveld wordt geen ''pic'' gebruikt. Het groepsveld wordt onderverdeeld in andere variabelen. In dit geval is dat ''a'' en ''b''. Bij deze variabelen moet wel een pic worden gebruikt en dit is hetzelfde als bij andere variabelen. De lengte van het groepsveld ''getal'' hangt af van de som van de lengest van variabelen die bij het groepsveld horen. Hier is dit dus 3 tekens lang(''a'' heeft er 1 en ''b'' heeft er 2). Als je dus een getal leest met het groepsveld ''getal'' zal die worden opgesplits. Hier een voorbeeld.
In dit programma wordt een getal gelezen en dat getal zal worden opgesplits in 2 getallen. In tegenstelling tot een gewone variabel, waar "77" wordt gebruikt bij het declareren, moet je voor een groepsveld "01" gebruiken dus "01 getal.". ''Getal'' zal dan de naam zijn van het groepsveld. Bij de naam van een groepsveld wordt geen ''pic'' gebruikt. Het groepsveld wordt onderverdeeld in andere variabelen. In dit geval is dat ''a'' en ''b''. Bij deze variabelen moet wel een pic worden gebruikt en dit is hetzelfde als bij andere variabelen. De lengte van het groepsveld ''getal'' hangt af van de som van de lengest van variabelen die bij het groepsveld horen. Hier is dit dus 3 tekens lang(''a'' heeft er 1 en ''b'' heeft er 2). Als je dus een getal leest met het groepsveld ''getal'' zal die worden opgesplits. Hier een voorbeeld.
{{code
|Taal = COBOL
|Titel = Scherm
|Code =
<pre>
<pre>
Scherm:
Scherm:
Regel 27: Regel 37:
93
93
</pre>
</pre>
}}
Om van de variabelen van een groepsveld apart op het scherm te tonen hoef je dus alleen maar ''display'' te gebruiken gevolgd door de naam van de variabel. Het omgekeerde is ook waar. Stel je vraagt eerst de voornaam van de gebruiker en daarna de achternaam en je wilt die heel makkelijk het op het scherm opnieuw tonen.
Om van de variabelen van een groepsveld apart op het scherm te tonen hoef je dus alleen maar ''display'' te gebruiken gevolgd door de naam van de variabel. Het omgekeerde is ook waar. Stel je vraagt eerst de voornaam van de gebruiker en daarna de achternaam en je wilt die heel makkelijk het op het scherm opnieuw tonen.
{{code
|Taal = COBOL
|Titel = Groepsvelden
|Code =
<pre>
<pre>
DATA DIVISION.
DATA DIVISION.
Regel 46: Regel 61:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
Heel simpel dus je leest apart de variabelen ''voornaam'' en ''achternaam''. Omdat die bij groepsveld ''naam'' horen kun je ze via ''display'' beide in één keer tonen op het scherm. Maar wat al je voornaam exact 10 letters lang is? Dan wordt de voornaam en achternaam aan elkaar geschreven. Hiervoor bestaat de ''filler''.
Heel simpel dus je leest apart de variabelen ''voornaam'' en ''achternaam''. Omdat die bij groepsveld ''naam'' horen kun je ze via ''display'' beide in één keer tonen op het scherm. Maar wat al je voornaam exact 10 letters lang is? Dan wordt de voornaam en achternaam aan elkaar geschreven. Hiervoor bestaat de ''filler''.
===Filler===
===Filler===
Een ''filler'' kan voor twee zaken worden gebruikt. Het eerste werd in het vorige stuk al aangehaald. Stel je hebt 2 variabelen in een groepsveld en de inhoud van die beide variabelen gebruiken de totale lengte dat die variabele aankan. Dan is het goed moest je nog een extra variabele, de ''filler'', tussen die 2 hebben die ervoor zorgt dat wanneer je het groepsveld toont er de twee variabelen niet aan elkaar worden getoond.
Een ''filler'' kan voor twee zaken worden gebruikt. Het eerste werd in het vorige stuk al aangehaald. Stel je hebt 2 variabelen in een groepsveld en de inhoud van die beide variabelen gebruiken de totale lengte dat die variabele aankan. Dan is het goed moest je nog een extra variabele, de ''filler'', tussen die 2 hebben die ervoor zorgt dat wanneer je het groepsveld toont er de twee variabelen niet aan elkaar worden getoond.
{{code
|Taal = COBOL
|Titel = Filler
|Code =
<pre>
<pre>
DATA DIVISION.
DATA DIVISION.
Regel 66: Regel 86:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
Hier is tussen die variabelen ''voornaam'' en ''achternaam'' nog een derde geplaatst. "02 pic x value " "" omdat je de filler toch niet gebruikt moet je het geen naam geven. Tussen ''achternaam'' en ''voornaam'' zal nu een spatie komen wanneer je het groepsveld ''naam'' toont. Je kunt natuurlijk naast een spatie ook alle andere tekens gebruiken -, +, *, /,... Let wel op! als je een filler gebruikt lees dan nooit het hele groepsveld in, in dit geval ''naam'', doe je dat wel overschrijf je de ''filler''. Dus nooit "accept naam".
Hier is tussen die variabelen ''voornaam'' en ''achternaam'' nog een derde geplaatst. "02 pic x value " "" omdat je de filler toch niet gebruikt moet je het geen naam geven. Tussen ''achternaam'' en ''voornaam'' zal nu een spatie komen wanneer je het groepsveld ''naam'' toont. Je kunt natuurlijk naast een spatie ook alle andere tekens gebruiken -, +, *, /,... Let wel op! als je een filler gebruikt lees dan nooit het hele groepsveld in, in dit geval ''naam'', doe je dat wel overschrijf je de ''filler''. Dus nooit "accept naam".


De ''filler'' kun je ook op een andere manier gebruiken. Wanneer je gegevens inleest kan het zijn dat je uiteindelijk bepaalde informatie niet nodig hebt. Je leest bijvoorbeeld namen in en je weet dat de eerste 10 tekens de voornaam is, maar die wil je niet. Dan kun je ook een ''filler'' gebruiken.
De ''filler'' kun je ook op een andere manier gebruiken. Wanneer je gegevens inleest kan het zijn dat je uiteindelijk bepaalde informatie niet nodig hebt. Je leest bijvoorbeeld namen in en je weet dat de eerste 10 tekens de voornaam is, maar die wil je niet. Dan kun je ook een ''filler'' gebruiken.
{{code
|Taal = COBOL
|Titel = filler
|Code =
<pre>
<pre>
01 naam.
01 naam.
Regel 74: Regel 99:
02 achternaam pic x(10).
02 achternaam pic x(10).
</pre>
</pre>
}}
Als je dan ''naam'' inleest zal de voornaam worden opgeslagen in de ''filler''. Maar omdat je die toch niet nodig hebt geef je de ''filler'' geen naam. De gegevens gaan wel echter niet verloren, als je het groepsveld ''naam'' toont krijg je nogsteeds de voornaam te zien. Het is gewoon een simple truc om minder variabelnamen te hebben bij grote programmas.
Als je dan ''naam'' inleest zal de voornaam worden opgeslagen in de ''filler''. Maar omdat je die toch niet nodig hebt geef je de ''filler'' geen naam. De gegevens gaan wel echter niet verloren, als je het groepsveld ''naam'' toont krijg je nogsteeds de voornaam te zien. Het is gewoon een simple truc om minder variabelnamen te hebben bij grote programmas.
==Conditie met voorwaardenaam==
==Conditie met voorwaardenaam==
Conditie met voorwaardenaam is een manier om een bepaalde variabel te activeren als er voldaan is aan een bepaalde voorwaarde.
Conditie met voorwaardenaam is een manier om een bepaalde variabel te activeren als er voldaan is aan een bepaalde voorwaarde.
===De simpele manier===
===De simpele manier===
{{code
|Taal = COBOL
|Titel = Conditie met voorwaardenaam
|Code =
<pre>
<pre>
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
Regel 101: Regel 131:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
De variabele ''getal'' is onderverdeeld in 2 andere variabelen ''even'' en ''oneven''. Als het getal dat wordt gelezen en opgeslagen wordt in de variabele ''getal'' even is wordt de variabele ''even'' geactiveerd. En met oneven wordt de variabele ''oneven'' geactiveerd.
De variabele ''getal'' is onderverdeeld in 2 andere variabelen ''even'' en ''oneven''. Als het getal dat wordt gelezen en opgeslagen wordt in de variabele ''getal'' even is wordt de variabele ''even'' geactiveerd. En met oneven wordt de variabele ''oneven'' geactiveerd.


===Gebruik van thru of through===
===Gebruik van thru of through===
Als veel opvolgende cijfers als voorwaarde gelden kun je thru gebruiken.
Als veel opvolgende cijfers als voorwaarde gelden kun je thru gebruiken.
{{code
|Taal = COBOL
|Titel = Conditie met voorwaardenaam
|Code =
<pre>
<pre>
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
Regel 129: Regel 164:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
Dit programma kijkt of een leerling gebuist of geslaagd is. Wanneer het getal lager dan 50 is zal de variabele ''niet geslaagd'' geactiveerd worden. Als het 50 of hoger is zal de variabele ''geslaagd'' geactiveerd worden. Naast ''thru'' kunt je ook ''through'' gebruiken.
Dit programma kijkt of een leerling gebuist of geslaagd is. Wanneer het getal lager dan 50 is zal de variabele ''niet geslaagd'' geactiveerd worden. Als het 50 of hoger is zal de variabele ''geslaagd'' geactiveerd worden. Naast ''thru'' kunt je ook ''through'' gebruiken.
===Een boolean===
===Een boolean===
Je kan dankzij conditie met voorwaardenaam dus ook een boolean maken. Hier is een simpel voorbeeld hoe het moet.
Je kan dankzij conditie met voorwaardenaam dus ook een boolean maken. Hier is een simpel voorbeeld hoe het moet.
{{code
|Taal = COBOL
|Titel = Boolean
|Code =
<pre>
<pre>
IDENTIFICATION DIVISION.
IDENTIFICATION DIVISION.
Regel 152: Regel 192:
STOP RUN.
STOP RUN.
</pre>
</pre>
}}
De gebruiker wordt gevraagd of het ok is. Antwoordt hij met een "j" dan wordt de variabel ok geactiveerd, wanneer hij met iets anders antwoordt gebeurt er niets.
De gebruiker wordt gevraagd of het ok is. Antwoordt hij met een "j" dan wordt de variabel ok geactiveerd, wanneer hij met iets anders antwoordt gebeurt er niets.
[[Categorie:Programmeren in COBOL]]

Versie van 23 jun 2007 19:50

Programmeren in COBOL

Inhoudsopgave




In dit hoofdstuk leer je over groepsvelden en condities met voorwaardenaam. Dit gaat een beetje dieper in op variabelen.

Groepsvelden

Een groepsveld kan gebruikt worden om via één accept data te geven aan meerdere variabelen.

COBOL-code: Groepsvelden

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 getal.
         02 a pic 9.
         02 b pic 99.

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY “geef een getal: “
           ACCEPT getal NO BEEP
           DISPLAY “-----”
           DISPLAY a
           DISPLAY b
           STOP RUN.

In dit programma wordt een getal gelezen en dat getal zal worden opgesplits in 2 getallen. In tegenstelling tot een gewone variabel, waar "77" wordt gebruikt bij het declareren, moet je voor een groepsveld "01" gebruiken dus "01 getal.". Getal zal dan de naam zijn van het groepsveld. Bij de naam van een groepsveld wordt geen pic gebruikt. Het groepsveld wordt onderverdeeld in andere variabelen. In dit geval is dat a en b. Bij deze variabelen moet wel een pic worden gebruikt en dit is hetzelfde als bij andere variabelen. De lengte van het groepsveld getal hangt af van de som van de lengest van variabelen die bij het groepsveld horen. Hier is dit dus 3 tekens lang(a heeft er 1 en b heeft er 2). Als je dus een getal leest met het groepsveld getal zal die worden opgesplits. Hier een voorbeeld.

COBOL-code: Scherm

Scherm:
geef een getal:
193
-----
1
93

Om van de variabelen van een groepsveld apart op het scherm te tonen hoef je dus alleen maar display te gebruiken gevolgd door de naam van de variabel. Het omgekeerde is ook waar. Stel je vraagt eerst de voornaam van de gebruiker en daarna de achternaam en je wilt die heel makkelijk het op het scherm opnieuw tonen.

COBOL-code: Groepsvelden

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 naam.
         02 voornaam pic x(10).
         02 achternaam pic x(10).

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY "geef uw voornaam:"
           ACCEPT voornaam NO BEEP
           DISPLAY "geef uw achternaam:"
           ACCEPT achternaam NO BEEP

           DISPLAY "-----"
           DISPLAY naam
           STOP RUN.

Heel simpel dus je leest apart de variabelen voornaam en achternaam. Omdat die bij groepsveld naam horen kun je ze via display beide in één keer tonen op het scherm. Maar wat al je voornaam exact 10 letters lang is? Dan wordt de voornaam en achternaam aan elkaar geschreven. Hiervoor bestaat de filler.

Filler

Een filler kan voor twee zaken worden gebruikt. Het eerste werd in het vorige stuk al aangehaald. Stel je hebt 2 variabelen in een groepsveld en de inhoud van die beide variabelen gebruiken de totale lengte dat die variabele aankan. Dan is het goed moest je nog een extra variabele, de filler, tussen die 2 hebben die ervoor zorgt dat wanneer je het groepsveld toont er de twee variabelen niet aan elkaar worden getoond.

COBOL-code: Filler

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 naam.
         02 voornaam pic x(10).
         02 pic x value " ".
         02 achternaam pic x(10).

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY "geef uw voornaam:"
           ACCEPT voornaam
           ACCEPT achternaam
           DISPLAY "-----"
           DISPLAY naam
           STOP RUN.

Hier is tussen die variabelen voornaam en achternaam nog een derde geplaatst. "02 pic x value " "" omdat je de filler toch niet gebruikt moet je het geen naam geven. Tussen achternaam en voornaam zal nu een spatie komen wanneer je het groepsveld naam toont. Je kunt natuurlijk naast een spatie ook alle andere tekens gebruiken -, +, *, /,... Let wel op! als je een filler gebruikt lees dan nooit het hele groepsveld in, in dit geval naam, doe je dat wel overschrijf je de filler. Dus nooit "accept naam".

De filler kun je ook op een andere manier gebruiken. Wanneer je gegevens inleest kan het zijn dat je uiteindelijk bepaalde informatie niet nodig hebt. Je leest bijvoorbeeld namen in en je weet dat de eerste 10 tekens de voornaam is, maar die wil je niet. Dan kun je ook een filler gebruiken.

COBOL-code: filler

       01 naam.
         02 pic x(10).
         02 achternaam pic x(10).

Als je dan naam inleest zal de voornaam worden opgeslagen in de filler. Maar omdat je die toch niet nodig hebt geef je de filler geen naam. De gegevens gaan wel echter niet verloren, als je het groepsveld naam toont krijg je nogsteeds de voornaam te zien. Het is gewoon een simple truc om minder variabelnamen te hebben bij grote programmas.

Conditie met voorwaardenaam

Conditie met voorwaardenaam is een manier om een bepaalde variabel te activeren als er voldaan is aan een bepaalde voorwaarde.

De simpele manier

COBOL-code: Conditie met voorwaardenaam

       IDENTIFICATION DIVISION.
       PROGRAM-ID. conditiemetvoorwaarden.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 getal pic 9.
         88 even value 0, 2, 4, 6, 8.
         88 oneven value 1, 3, 5, 7, 9.

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY "geef een getal:"
           ACCEPT getal NO BEEP

           IF even 
             THEN DISPLAY "getal is even."
           END-IF
           IF oneven
             THEN DISPLAY "getal is oneven."
           END-IF
           STOP RUN.

De variabele getal is onderverdeeld in 2 andere variabelen even en oneven. Als het getal dat wordt gelezen en opgeslagen wordt in de variabele getal even is wordt de variabele even geactiveerd. En met oneven wordt de variabele oneven geactiveerd.

Gebruik van thru of through

Als veel opvolgende cijfers als voorwaarde gelden kun je thru gebruiken.

COBOL-code: Conditie met voorwaardenaam

       IDENTIFICATION DIVISION.
       PROGRAM-ID. conditiemetvoorwaarden.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 getal pic 99.
         88 nietgeslaagd value 0 thru 49.
         88 geslaagd value 50 thru 99.

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY "Geef het resultaat:"
           ACCEPT getal NO BEEP

           IF nietgeslaagd
             THEN DISPLAY "U bent nietgeslaagd."
           END-IF

           IF geslaagd
             THEN DISPLAY "U bent geslaagd."
           END-IF
           STOP RUN.

Dit programma kijkt of een leerling gebuist of geslaagd is. Wanneer het getal lager dan 50 is zal de variabele niet geslaagd geactiveerd worden. Als het 50 of hoger is zal de variabele geslaagd geactiveerd worden. Naast thru kunt je ook through gebruiken.

Een boolean

Je kan dankzij conditie met voorwaardenaam dus ook een boolean maken. Hier is een simpel voorbeeld hoe het moet.

COBOL-code: Boolean

       IDENTIFICATION DIVISION.
       PROGRAM-ID. conditiemetvoorwaarden.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       77 boolean pic x.
         88 ok value "j", "J".

       PROCEDURE DIVISION.
       HOOFD.
           DISPLAY "Is het OK?(j/n)"
           ACCEPT boolean NO BEEP

           IF ok
             THEN DISPLAY "Het is ok"
             ELSE DISPLAY "Het is niet ok"
           END-IF
           STOP RUN.

De gebruiker wordt gevraagd of het ok is. Antwoordt hij met een "j" dan wordt de variabel ok geactiveerd, wanneer hij met iets anders antwoordt gebeurt er niets.

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