Programmeren in REXX/Voorbeeldprogramma's: verschil tussen versies
Verwijderde inhoud Toegevoegde inhoud
Toevoegingen |
Kleine aanpassingen |
||
Regel 54:
exit
</pre> }}
Dit programmaatje bevat een beginnersfout. Er wordt namelijk getest met '''datatype(...,'N')''' om te zien of het een getal betreft. Doch '''
if datatype(waarde,'W') then do
moeten zijn, om na te gaan of het een geheel getal betrof.
Regel 77:
parse upper pull koffie . ; koffie=left(koffie,1)
Een andere overweging die je als programmeur moet maken is of je "Jazeker" of "
parse upper pull koffie .
select
when abbrev('JA',koffie,1) then say "OK, ik ga er een halen voor jou"
Regel 85:
otherwise say 'Sorry, ik versta uw antwoord "'koffie'" niet'
end
"Jazeker" zal de test van de eerste '''when''' nog wel doorstaan (kijk er eventueel [[Programmeren in REXX/Functies_deel_1#ABBREV - geldige afkorting|Abbrev]] nog eens op na). "Juli en augustus" voldoet helemaal niet.
<!------------------------------------------------------->
==Gebruik van subroutines==
Regel 101 ⟶ 102:
return 3.14 * straal**2
</pre> }}
Een '''do until''' voert de lus altijd minstens éénmaal uit. Al hebben we variabele ''ok'' niet geïnitialiseerd vóór de lus, de waarde wordt toch pas aan het eind van de lus getest, en dan hebben we er wel een logische waarde 0 of 1 aan gegeven.
Een probleempje hier is dat de gebruiker absoluut verplicht is om 2 waarden in te geven, anders stopt het programma nooit, tenzij hij/zij weet dat je kan afbreken met een Ctrl-Break of Ctrl-C combinatie.
<!-------------------------------------------------------->
==Tekstweergave==
{{Code| | Taal= REXX | Titel= titel.rex | Code= <pre>
/* Een kadertje met de titel maken */
parse arg titel /* Titel ophalen */
parse value 60 4 '*', /* initialiseren */
with breedte rand symbool .
binnen=breedte-rand /* breedte tekst */
say copies(symbool,breedte) /* bovenlijn kadertje */
do while length(titel)>binnen
deel=left(titel,binnen) /* analyse deel titel */
blank=lastpos(' ',deel) /* waar laatste blank */
if blank=0 then blank=binnen /* geen blank gevonden */
parse var titel deel =(blank) titel /* opeten */
say symbool center(deel,binnen) symbool /* drukken */
end
say symbool center(titel,binnen) symbool /* rest */
say copies(symbool,breedte) /* onderlijn kadertje */
exit
</pre> }}
De test '''if blank=0''' is nodig, want het kan zijn dat in het deel dat we behandelen geen spatie voorkomt. Dan kunnen we niet anders dan brutaal splitsen op die plaats. Mooi is het dan misschien niet, maar als de kader enige breedte heeft zal dit toch niet zo gauw voorkomen.
==Gebruik van een stem==
{{Code| | Taal= REXX | Titel= stad.rex | Code= <pre>
Regel 146 ⟶ 148:
{{Code| | Taal= REXX | Titel= postcode.rex | Code= <pre>
/* postcode.rex */
postcode. = "
postcode.Brussel=1000
postcode.Antwerpen=2000
Regel 156 ⟶ 158:
say 'Geef de naam van uw stad, of blank om te eindigen'
parse pull stad
if postcode.code \=
say "U woont in" postcode.stad "!"
else say "De postcode is
end
exit
Regel 230 ⟶ 232:
/* - getallen worden toegevoegd in de priem.lst */
/********************************************************************/
numeric digits
/********************************************************************/
/* Stap 1: We lezen priem.lst die in zelfde map als pgm staat */
Regel 282 ⟶ 284:
/********************************************************************/
call stream priembestand,'C','OPEN WRITE APPEND' /* Openen bestand */
veldbreedte=min(length(priem.z),digits()+1)+1 /* afdrukbreedte */
do i=priem.0-999 to priem.0 by 10 /* 10 per regel wegschrijven */
lijn='' /* Start met blanco lijn */
do j=i to i+9 /* regel opbouwen */
lijn=lijn||format(priem.j,
end
call lineout priembestand,lijn /* Wegschrijven regel */
|