Exercise - writing a function – IBM SC34-5764-01 User Manual
Page 90
Exercise - Writing a Function
Write a function named AVG that receives a list of numbers separated by blanks and computes their
average. The final answer can be a decimal number. To call this function, you would use:
AVG(number1 number2 number3...)
Use the WORDS (see section “WORDS” on page 198) and WORD (see section “WORD” on page 197)
built-in functions.
ANSWER
/*************************** REXX ************************************/
/*
This internal subroutine checks for valid input of "HEADS",
*/
/*
"TAILS", or "" (to quit).
If the input is anything else, the
*/
/*
subroutine says the input is not valid and gets the next input.
*/
/*
The subroutine keeps repeating until the input is valid.
*/
/*
Commonly used variables return information to the main program
*/
/*********************************************************************/
check:
DO UNTIL outcome = 'correct'
SELECT
WHEN flip = 'HEADS' THEN
outcome = 'correct'
WHEN flip = 'TAILS' THEN
outcome = 'correct'
WHEN flip = '' THEN
EXIT
OTHERWISE
outcome = 'incorrect'
PULL flip
END
END
RETURN
Figure 42. Possible Solution (Internal Subroutine Named CHECK)
/******************************* REXX ********************************/
/*
This external subroutine receives the valid input, analyzes it,
*/
/*
gets a random "flip" from the computer, and compares the two.
*/
/*
If they are the same, the user wins.
If they are different,
*/
/*
the computer wins.
The routine returns the outcome to the
*/
/*
calling program.
*/
/*********************************************************************/
throw:
ARG input
IF input = 'HEADS' THEN
userthrow = 0
/* heads = 0
*/
ELSE
userthrow = 1
/* tails = 1
*/
compthrow = RANDOM(0,1)
/* choose a random number
*/
/* between 0 and 1
*/
IF compthrow = userthrow THEN
outcome = 'human'
/* user chose correctly
*/
ELSE
outcome = 'machine'
/* user chose incorrectly
*/
RETURN outcome
Figure 43. Possible Solution (External Subroutine named THROW)
Writing Subroutines and Functions
68
CICS TS for VSE/ESA: REXX Guide