我是新手,我正在努力弄清楚如何让它发挥作用。我的任务是从用户那里获取一个整数值列表,以分号分隔,并发送该列表中的最高值和最低值。到目前为止,我已经使用了一个入口函数来帮助我一个接一个地获取用户输入的整数。像这样
repeat I = 1 to totalEntries:
m = entry (I, Userinput, ";").
display m.
end.
在此之后,我想找出所有条目的最大值。我怎么能这样做,因为最大函数接受多个值进行比较。
我是新手,我正在努力弄清楚如何让它发挥作用。我的任务是从用户那里获取一个整数值列表,以分号分隔,并发送该列表中的最高值和最低值。到目前为止,我已经使用了一个入口函数来帮助我一个接一个地获取用户输入的整数。像这样
repeat I = 1 to totalEntries:
m = entry (I, Userinput, ";").
display m.
end.
在此之后,我想找出所有条目的最大值。我怎么能这样做,因为最大函数接受多个值进行比较。
没有内置函数可以从给定的数字列表中给出最大或最小数字。您需要像大多数编程语言一样编写自己的逻辑。这是一个例子:
DEF VAR i AS INT.
DEF VAR nlist AS CHAR INIT "1;2;7;3;6;9".
DEF VAR imin AS INT.
DEF VAR imax AS INT.
imin = INTEGER(ENTRY (1, nlist, ";")).
imax = INTEGER(ENTRY (1, nlist, ";")).
REPEAT i = 2 TO NUM-ENTRIES(nlist, ";"):
IF INTEGER(ENTRY(i, nlist, ";")) > imax THEN
imax = INTEGER(ENTRY(i, nlist, ";")).
IF INTEGER(ENTRY(i, nlist, ";")) < imin THEN
imin = INTEGER(ENTRY(i, nlist, ";")).
END.
MESSAGE imax.
MESSAGE imin.
正如奥斯汀所悲伤的那样,Progress 中没有内置函数可以从列表中给出最大或最小数字。
在您的评论中,您提到 MAXIMUM(1,2,3) 有效。是的,它有效,但您必须确定您将三个参数传递给函数,而不是单个CHAR
变量中的数字列表。
要解决您的问题,您可以使用 Austin 给出的解决方案,或者您可以使用两个函数,它们接收CHAR
带有分号分隔值的变量并返回最大值或最小值。
这是一个示例,基于您的代码。
FUNCTION iMax RETURNS INTEGER
( INPUT pData AS CHAR ):
DEF VAR iOutput AS INT NO-UNDO.
DEF VAR iCount AS INT NO-UNDO.
iOutput = ?.
DO iCount = 1 TO NUM-ENTRIES(pData,';'):
IF iOutput = ? THEN DO:
iOutput = INT(ENTRY(iCount,pData,';')).
NEXT.
END.
iOutput = MAX(iOutput,INT(ENTRY(iCount,pData,';'))).
END.
RETURN iOutput.
END FUNCTION.
FUNCTION iMin RETURNS INTEGER
( INPUT pData AS CHAR ):
DEF VAR iOutput AS INT NO-UNDO.
DEF VAR iCount AS INT NO-UNDO.
iOutput = ?.
DO iCount = 1 TO NUM-ENTRIES(pData,';'):
IF iOutput = ? THEN DO:
iOutput = INT(ENTRY(iCount,pData,';')).
NEXT.
END.
iOutput = MIN(iOutput,INT(ENTRY(iCount,pData,';'))).
END.
RETURN iOutput.
END FUNCTION.
/****************/
Define variable NumberEntry as character view-as fill-in no-undo.
Define variable UsersInput as character no-undo.
Define variable i as integer no-undo.
Define variable totalEntries as integer no-undo.
Define variable m as character no-undo.
Define variable n as character no-undo.
Define button bFind.
Define frame main numberEntry label "Enter numbers separated by semi colon" skip
bFind label "Find Max and Min" with side-labels. /*Trigger for button*/
On choose of bFind in frame main do: /*Retrieve the users input*/
Usersinput = (numberEntry:screen-value). /*to find out how many characters the user has enterd.*/ totalEntries = num-entries(UsersInput,';'). Display totalentries. /*Logic to extract Users input values one by one.*/
Repeat i = 1 to totalEntries: M = entry(i, UsersInput, ";").
Display m.
End. /*Logic to find the maximum element. */ .....
MESSAGE 'MAXIMUM :' iMax(UsersInput) SKIP
'MINIMUM :' iMin(UsersInput)
VIEW-AS ALERT-BOX INFO BUTTONS OK.
END.
VIEW FRAME main.
ENABLE ALL WITH FRAME main.
WAIT-FOR CHOOSE OF bfind.
您可以使用由分号分隔的值列表调用iMax()
或并从 Progress和函数中iMin()
获取 MAX 或 MIN 值,而无需制作完整的代码块来进行比较并获取每种情况的必要信息。MAXIMUM
MINIMUM
CHAR
INTEGER
希望能帮助到你。