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 |
|
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. |


