Programmeren in REXX/Voorbeeldprogramma's
Uit Wikibooks
|
|
|
|
Inhoud |
[bewerken] Letterlijke tekst
Zonder PARSE wordt de tekst omgezet naar hoofdletters.
REXX-code:echo.rex
/* echo.rex */ PARSE PULL tekst DO WHILE tekst \== "" /* '\==' betekent 'niet gelijk aan' */ SAY tekst PARSE PULL tekst END
[bewerken] Omwisselen van twee variabelen
REXX-code:omwisseling.rex
/* omwisseling.rex */ SAY "Geef me twee getallen" PULL A PULL B X = A A = B B = X SAY "Omgewisseld:" A B
[bewerken] Als ... dan ...
Maximum van 2 getallen:
REXX-code:maximum_van_twee.rex
/* maximum_van_twee.rex */ SAY "Geef me twee getallen" PULL getal1 PULL getal2 IF (getal1 > getal2) THEN SAY getal1 "is het grootste" ELSE SAY getal2 "is het grootste"
[bewerken] Tekstweergave
REXX-code:titel.rex
/* titel.rex */
breedte=40
rand=4
symbool='*'
opvulling='�'
SAY "Geef weer te geven titel"
PARSE PULL titel
IF LENGTH(titel) > breedte-rand
THEN
SAY "Uw titel is te lang en kan daarom niet weergegeven worden"
ELSE DO
SAY COPIES(symbool, breedte)
SAY symbool COPIES(opvulling, breedte-rand) symbool
SAY symbool CENTER(titel, breedte-rand) symbool
SAY symbool COPIES(opvulling, breedte-rand) symbool
SAY COPIES(symbool, breedte)
END
[bewerken] Waardeconversie
REXX-code:omzetting.rex
/* omzetting.rex */
SAY "Geef om te zetten waarde."
PULL n
/* Indien 1 teken: omzetting ervan uitgaande dat het ASCII is */
IF LENGTH(n) = 1
THEN DO
SAY '['n'] ASCII -> Decimaal = ' c2d(n)
SAY '['n'] ASCII -> Hexadecimaal = ' c2x(n)
END
/* Indien decimaal getal */
IF DATATYPE(n,'N')
THEN DO
SAY '['n'] Decimaal -> ASCII = ' d2C(n)
SAY '['n'] Decimaal -> Hexadecimaal = ' d2x(n)
END
/* indien zestiENDelig getal*/
IF DATATYPE(n,'X')
THEN DO
SAY '['n'] Hexadecimaal -> ASCII = ' x2C(n)
SAY '['n'] Hexadecimaal -> Decimaal = ' x2d(n)
END
[bewerken] Antwoordvalidatie
Wachten op een geldig antwoord.
REXX-code:koffievraag.rex
/* Koffievraag.rex */ DO WHILE \(koffie="J" | koffie="N") SAY "Wil je koffie?" PULL koffie END
[bewerken] Herhalen
REXX-code:herhaling.rex
/* herhaling.rex */ DO 3 SAY x END DO i = 1 to 10 SAY i END DO j = 1 to 2 DO k = 1 to 3 SAY "j=" j "k=" k END /*k*/ END /*j*/ SAY "j=" j "k=" k
[bewerken] Meerdere mogelijkheden
REXX-code:weekdagen.rex
/* Weekdagen.rex */ SAY "Geef me volgnummer van de dag" PULL D SELECT WHEN D = 1 THEN SAY "maandag" WHEN D = 2 THEN SAY "dinsdag" WHEN D = 3 THEN SAY "woensdag" WHEN D = 4 THEN SAY "DOnderdag" WHEN D = 5 THEN SAY "vrijdag" OTHERWISE SAY "weekeinde" END
[bewerken] Subroutines
REXX-code:oppervlakte_DOnut.rex
/* Oppervlakte_DOnut.rex */ SAY "Grootte van de grote straal?" PULL r1 SAY "Grootte van de kleine straal?" PULL r2 opp = area(r1) - area(r2) SAY opp EXIT area: arg r cirkel = 3.14 * r * r return cirkel
histogram:
REXX-code:lijnen.rex
/* lijnen.rex */
CALL lijn 5
CALL lijn 1
CALL lijn 33
EXIT
lijn:
arg lengte
SAY COPIES('-',lengte)
return
De speciale variabele RESULT:
REXX-code:product.rex
/* product.rex */ CALL product 3, 4 SAY "=" result /* het resultaat staat in de speciale variabele 'RESULT'*/ SAY product(4,5) EXIT product: arg eerste, tweede return eerste * tweede
[bewerken] Gegevens in een rij
REXX-code:stad.rex
/* stad.rex */ stad. = "onbekEND" stad.1000="Brussel" stad.2000="Antwerpen" stad.3500="Hasselt" stad.8000="Brugge" stad.9000="Gent" SAY "Geef uw postcode" SAY "(4 cijfers)" PULL postcode IF stad.postcode <> stad. THEN SAY "U woont dus in" stad.postcode "!" ELSE SAY "De postcode is" stad.
Dit werkt ook omgekeerd:
REXX-code:postcode.rex
/* postcode.rex */ postcode. = "onbekEND" postcode.Brussel=1000 postcode.Antwerpen=2000 postcode.Hasselt=3500 postcode.Brugge=8000 postcode.Gent=9000 SAY "In welke stad woont u?" PULL stad IF postcode.stad <> postcode. THEN SAY "De postcode van" stad "is" postcode.stad "!" ELSE SAY "De postcode is" postcode.
[bewerken] Sorteren van een rij
Sorteer een reeks getallen van groot naar klein
REXX-code:sorteer.rex
/* sorteer.rex */ A.1 = 9 A.2 = 6 A.3 = 3 A.4 = 10 A.5 = 2 A.6 = 1 T1 = 6 DO WHILE (1<T1) T2 = 1 DO WHILE (T2<T1) IF (A.T1 > A.T2) THEN DO temp = A.T1 A.T1 = A.T2 A.T2 = temp END T2 = T2 + 1 END T1 = T1 - 1 END T=1 DO WHILE (T <= 6) SAY A.T T = T + 1 END
[bewerken] Combinatie
REXX-code:combinatie.rex
/* combinatie.rex */ cls max = 0 teller = 1 output = "" SAY "Geef eerste getal (stoppen kan met een negatief getal)" PULL getal IF (getal >= 0) THEN DO DO WHILE (getal >= 0) IF (getal > max) THEN max = getal A.teller = getal SAY "Geef nog een getal (stoppen kan met een negatief getal)" PULL getal teller = teller + 1 END SAY "maximum van de reeks" lengte = teller teller = 1 DO WHILE (teller < lengte) SAY A.teller output = output A.teller teller = teller + 1 END SAY "is" max "van" output END ELSE SAY "De reeks werd onmiddellijk afgebroken met een negatief getal"