Programmeren in REXX/Voorbeeldprogramma's: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Toevoegingen
GuyDC (overleg | bijdragen)
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 '''DC2D2C''' kan enkel met gehele getallen overweg. De test had daarom
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 "JeJuli benten gekaugustus" ook als geldig antwoord wil aanzien. Een strengere schrijfwijze is daarom:
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.
Deze DO-lus zal starten want we hebben ''ok'' geen waarde gegeven, dus die is "OK" en niet "1".
 
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. = "onbekend"
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 \= postcode."" then
say "U woont in" postcode.stad "!"
else say "De postcode is" postcodeonbekend."
end
exit
Regel 230 ⟶ 232:
/* - getallen worden toegevoegd in de priem.lst */
/********************************************************************/
numeric digits 1015 /* we voorzien grote getallen */
/********************************************************************/
/* 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&#124;&#124;format(priem.j,10veldbreedte) /* Toevoegen aan regel */
end
call lineout priembestand,lijn /* Wegschrijven regel */
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.