Comparing Lists of Numbers to a Value
September 20, 2002 Timothy Prickett Morgan
Hey, Ted:
It’s a shame you can’t do something like this in RPG:
* if any of the fields > 25 If (field1 or field2 or field3) > 25 etc Endif * if all three fields > 25) If (field1 and field2 and field3) > 25 etc Endif
|
— David
Who says you can’t, David? You just have to do it a different way. You know, cogitate external to the rectangular container constructed of corrugated paper.
Many programming languages have minimum and maximum functions, which return one value from a list. OPNQRYF and Microsoft Excel come to mind.
Below is source code for a module containing minimum and maximum functions for integers. To use them, pass a list of two to eight values to the function. Here’s an example of how to use them:
D/copy prototypes,minmax D field1 s 5p 0 D field2 s 5p 0 D field3 s 5p 0 * if field1 > 25 or field2 > 25 or field3 > 25 C if MaxInt(field1: field2: field3) > 25 * at least one is greater, because the largest is greater C endif * if field1 > 25 and field2 > 25 and field3 > 25 C if MinInt(field1: field2: field3) > 25 * all are greater, because the smallest is greater C endif
I hope this helps.
— Ted
Prototype member:
D MaxInt pr 10i 0 D N1 10i 0 value D N2 10i 0 value D N3 10i 0 value options(*nopass) D N4 10i 0 value options(*nopass) D N5 10i 0 value options(*nopass) D N6 10i 0 value options(*nopass) D N7 10i 0 value options(*nopass) D N8 10i 0 value options(*nopass) D MinInt pr 10i 0 D N1 10i 0 value D N2 10i 0 value D N3 10i 0 value options(*nopass) D N4 10i 0 value options(*nopass) D N5 10i 0 value options(*nopass) D N6 10i 0 value options(*nopass) D N7 10i 0 value options(*nopass) D N8 10i 0 value options(*nopass)
Module member:
H nomain /copy prototypes,minmax P MaxInt b export D pi 10i 0 D N1 10i 0 value D N2 10i 0 value D N3 10i 0 value options(*nopass) D N4 10i 0 value options(*nopass) D N5 10i 0 value options(*nopass) D N6 10i 0 value options(*nopass) D N7 10i 0 value options(*nopass) D N8 10i 0 value options(*nopass) D Value s 10i 0 D ParmCt s 10i 0 C eval ParmCt = %parms C eval Value = N1 C if N2 > Value C eval Value = N2 C endif C if ParmCt >=3 C if N3 > Value C eval Value = N3 C endif C endif C if ParmCt >=4 C if N4 > Value C eval Value = N4 C endif C endif C if ParmCt >=5 C if N5 > Value C eval Value = N5 C endif C endif C if ParmCt >=6 C if N6 > Value C eval Value = N6 C endif C endif C if ParmCt >=7 C if N7 > Value C eval Value = N7 C endif C endif C if ParmCt >=8 C if N8 > Value C eval Value = N8 C endif C endif C return Value P e P MinInt b export D pi 10i 0 D N1 10i 0 value D N2 10i 0 value D N3 10i 0 value options(*nopass) D N4 10i 0 value options(*nopass) D N5 10i 0 value options(*nopass) D N6 10i 0 value options(*nopass) D N7 10i 0 value options(*nopass) D N8 10i 0 value options(*nopass) D Value s 10i 0 D ParmCt s 10i 0 C eval ParmCt = %parms C eval Value = N1 C if N2 < Value C eval Value = N2 C endif C if ParmCt >=3 C if N3 < Value C eval Value = N3 C endif C endif C if ParmCt >=4 C if N4 < Value C eval Value = N4 C endif C endif C if ParmCt >=5 C if N5 < Value C eval Value = N5 C endif C endif C if ParmCt >=6 C if N6 < Value C eval Value = N6 C endif C endif C if ParmCt >=7 C if N7 < Value C eval Value = N7 C endif C endif C if ParmCt >==8 C if N8 < Value C eval Value = N8 C endif C endif C return Value P e
Sponsored By ADVANCED SYSTEMS CONCEPTS |
SEQUEL meets all your iSeries and AS/400 data access needs in a single, integrated solution:
Take 6 minutes to view a SEQUEL ViewPoint ScreenCam movie to see how simple Windows-based AS/400 and iSeries data access can be! In just a few short minutes, you can find out ways to make your job easier and improve data access throughout your organization. Download the ViewPoint movie here . For more information or a FREE trial of SEQUEL, call 847/605-1311 or visit Advanced Systems Concepts. |