Programmeren in COBOL/Velden/Groepsvelden en conditie met voorwaardenaam: verschil tussen versies
kGeen bewerkingssamenvatting |
truUK, gebuisD + switch |
||
Regel 1: | Regel 1: | ||
{{Programmeren in COBOL}} |
{{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]]. |
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 |
Een groepsveld kan gebruikt worden om via één ACCEPT data te geven aan meerdere variabelen. |
||
{{code |
{{code |
||
|Taal = COBOL |
|Taal = COBOL |
||
Regel 11: | Regel 12: | ||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
01 getal. |
01 getal. |
||
02 a |
02 a PIC 9. |
||
02 b |
02 b PIC 99. |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 24: | Regel 25: | ||
</pre> |
</pre> |
||
}} |
}} |
||
In dit programma wordt een getal gelezen en dat getal zal worden |
In dit programma wordt een getal gelezen en dat getal zal worden opgesplitst in 2 getallen. In tegenstelling tot een gewone variabele, waar ''level'' "77" wordt gebruikt bij het declareren, moet je voor een groepsveld "01" gebruiken: "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 lengtes 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 opgesplitst. |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
<pre> |
<pre> |
||
Scherm: |
|||
geef een getal: |
geef een getal: |
||
193 |
193 |
||
Regel 37: | Regel 33: | ||
93 |
93 |
||
</pre> |
</pre> |
||
⚫ | |||
Om |
Om 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 variabele. Het omgekeerde is ook waar. Stel, je vraagt eerst de voornaam van de gebruiker en daarna de achternaam en je wilt die heel makkelijk opnieuw op het scherm weergeven. |
||
{{code |
{{code |
||
|Taal = COBOL |
|Taal = COBOL |
||
Regel 47: | Regel 43: | ||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
01 naam. |
01 naam. |
||
02 voornaam |
02 voornaam PIC X(10). |
||
02 achternaam |
02 achternaam PIC X(10). |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 62: | Regel 58: | ||
</pre> |
</pre> |
||
}} |
}} |
||
Heel simpel dus je leest apart de variabelen ''voornaam'' en ''achternaam''. Omdat die bij groepsveld ''naam'' horen kun je ze via '' |
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 '' |
Een ''FILLER'' kan voor twee zaken worden gebruikt. De eerste werd hierboven al aangehaald: Als je 2 variabelen in een groepsveld hebt en die gebruiken de totale voorziene lengte (bepaald door PIC). Met een extra variabele, de ''FILLER'', kan je een spatie tussen die 2 variabelen zetten. |
||
{{code |
{{code |
||
|Taal = COBOL |
|Taal = COBOL |
||
|Titel = |
|Titel = FILLER |
||
|Code = |
|Code = |
||
<pre> |
<pre> |
||
Regel 73: | Regel 70: | ||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
01 naam. |
01 naam. |
||
02 voornaam |
02 voornaam PIC X(10). |
||
02 |
02 PIC X VALUE " ". |
||
02 achternaam |
02 achternaam PIC X(10). |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 87: | Regel 84: | ||
</pre> |
</pre> |
||
}} |
}} |
||
Hier is tussen die variabelen ''voornaam'' en ''achternaam'' nog een derde geplaatst |
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 hem niet benoemen. Sommige compilers geven wel een ''warning'' als je hem niet FILLER noemt (''02 FILLER PIC X VALUE " "''). 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 -, +, *, /,... Maar let op als je een FILLER gebruikt: Lees dan nooit het hele groepsveld in, in dit geval ''naam'', anders overschrijf je de ''FILLER''. Dus nooit "ACCEPT naam". |
||
De '' |
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 |
{{code |
||
|Taal = COBOL |
|Taal = COBOL |
||
|Titel = |
|Titel = FILLER |
||
|Code = |
|Code = |
||
<pre> |
<pre> |
||
01 naam. |
01 naam. |
||
02 |
02 PIC X(10). |
||
02 achternaam |
02 achternaam PIC X(10). |
||
</pre> |
</pre> |
||
}} |
}} |
||
Als je dan ''naam'' inleest zal de voornaam worden opgeslagen in de '' |
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 toch niet verloren: Als je het groepsveld ''naam'' toont, krijg je nog steeds de voornaam te zien. Het is gewoon een simple truuk om minder (overbodige) variabelen te hebben bij grote programma's. |
||
==Conditie met voorwaardenaam== |
==Conditie met voorwaardenaam== |
||
Conditie met voorwaardenaam is een manier om een bepaalde |
Conditie met voorwaardenaam is een manier om een bepaalde variabele te activeren als er voldaan is aan een bepaalde voorwaarde. |
||
===De simpele manier=== |
===De simpele manier=== |
||
{{code |
{{code |
||
Regel 114: | Regel 112: | ||
DATA DIVISION. |
DATA DIVISION. |
||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
77 getal |
77 getal PIC 9. |
||
88 even |
88 even VALUE 0, 2, 4, 6, 8. |
||
88 oneven |
88 oneven VALUE 1, 3, 5, 7, 9. |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 132: | Regel 130: | ||
</pre> |
</pre> |
||
}} |
}} |
||
De variabele ''getal'' is onderverdeeld in 2 andere variabelen ''even'' en ''oneven''. Als het getal dat wordt |
De variabele ''getal'' is onderverdeeld in 2 andere variabelen: ''even'' en ''oneven''. Als het getal dat wordt opgeslagen in de variabele ''getal'', even is, dan wordt de variabele ''even'' geactiveerd. En met oneven wordt de variabele ''oneven'' geactiveerd. |
||
===Gebruik van |
===Gebruik van THRU of through=== |
||
Als veel opvolgende cijfers als voorwaarde gelden kun je |
Als veel opvolgende cijfers als voorwaarde gelden, kun je THRU gebruiken. |
||
{{code |
{{code |
||
|Taal = COBOL |
|Taal = COBOL |
||
Regel 146: | Regel 144: | ||
DATA DIVISION. |
DATA DIVISION. |
||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
77 getal |
77 getal PIC 99. |
||
88 nietgeslaagd |
88 nietgeslaagd VALUE 0 THRU 49. |
||
88 geslaagd |
88 geslaagd VALUE 50 THRU 99. |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 165: | Regel 163: | ||
</pre> |
</pre> |
||
}} |
}} |
||
Dit programma kijkt of een leerling |
Dit programma kijkt of een leerling al of niet 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 de Amerikaanse spelling ''THRU'' kan, je ook het Engelse ''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. |
||
Regel 178: | Regel 177: | ||
DATA DIVISION. |
DATA DIVISION. |
||
WORKING-STORAGE SECTION. |
WORKING-STORAGE SECTION. |
||
77 boolean |
77 boolean PIC X. |
||
88 ok |
88 ok VALUE "j", "J". |
||
PROCEDURE DIVISION. |
PROCEDURE DIVISION. |
||
Regel 193: | Regel 192: | ||
</pre> |
</pre> |
||
}} |
}} |
||
De gebruiker wordt gevraagd of het ok is. Antwoordt hij met een "j" dan wordt de |
De gebruiker wordt gevraagd of het ok is. Antwoordt hij met een "j", dan wordt de variabele ok geactiveerd; wanneer hij met iets anders antwoordt gebeurt er niets. |
||
====Switch==== |
|||
Een switch of vlag is ook een boolean. Zo kan bijgehouden worden of het einde van een bestand (EOF = end-of-file) of tabel bereikt werd. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
<pre> |
|||
01 SW-EOF PIC X VALUE 'N'. |
|||
88 EOF PIC X VALUE 'Y'. |
|||
</pre> |
|||
⚫ | |||
[[Categorie:Programmeren in COBOL|Groepsvelden en conditie met voorwaardenaam]] |
[[Categorie:Programmeren in COBOL|Groepsvelden en conditie met voorwaardenaam]] |
Versie van 6 okt 2007 19:08
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 opgesplitst in 2 getallen. In tegenstelling tot een gewone variabele, waar level "77" wordt gebruikt bij het declareren, moet je voor een groepsveld "01" gebruiken: "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 lengtes 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 opgesplitst.
geef een getal: 193 ----- 1 93
Om 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 variabele. Het omgekeerde is ook waar. Stel, je vraagt eerst de voornaam van de gebruiker en daarna de achternaam en je wilt die heel makkelijk opnieuw op het scherm weergeven.
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. De eerste werd hierboven al aangehaald: Als je 2 variabelen in een groepsveld hebt en die gebruiken de totale voorziene lengte (bepaald door PIC). Met een extra variabele, de FILLER, kan je een spatie tussen die 2 variabelen zetten.
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 hem niet benoemen. Sommige compilers geven wel een warning als je hem niet FILLER noemt (02 FILLER PIC X VALUE " "). 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 -, +, *, /,... Maar let op als je een FILLER gebruikt: Lees dan nooit het hele groepsveld in, in dit geval naam, anders 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 toch niet verloren: Als je het groepsveld naam toont, krijg je nog steeds de voornaam te zien. Het is gewoon een simple truuk om minder (overbodige) variabelen te hebben bij grote programma's.
Conditie met voorwaardenaam
Conditie met voorwaardenaam is een manier om een bepaalde variabele 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 opgeslagen in de variabele getal, even is, dan 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 al of niet 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 de Amerikaanse spelling THRU kan, je ook het Engelse 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 variabele ok geactiveerd; wanneer hij met iets anders antwoordt gebeurt er niets.
Switch
Een switch of vlag is ook een boolean. Zo kan bijgehouden worden of het einde van een bestand (EOF = end-of-file) of tabel bereikt werd.
COBOL-code: Switch
01 SW-EOF PIC X VALUE 'N'. 88 EOF PIC X VALUE 'Y'.