Programmeren in REXX/Voorbeeldprogramma's

Uit Wikibooks

Ga naar: navigatie, zoek

WSBN


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"
Informatie afkomstig van http://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.
Persoonlijke instellingen