注册 登录
编程论坛 VFP论坛

数组求最大值,平均值

a1999zqw 发布于 2021-07-18 22:15, 1324 次点击
一维数组a1=1,a2=4,a3=12,a4=3,a5=9,a6=12.6,a7=25,........,a200=51
需要求某-段连续的最大值和平均值,例如a3到a7的最大值和平均值,或者a13到a169的最大值和平均值,谢谢
7 回复
#2
琅拿度2021-07-19 08:29
a_max=0
a_tot=0
ii=0
for i=13 to 169
ic=allt(str(i))
a_max=max(a_max,a&ic)
a_tot=a_tot+a&ic
ii=ii+1
endfor

最大值=a_max
平均值=a_tot/ii


#3
sdta2021-07-19 09:39
程序代码:
CLEAR
LOCAL an[100]
FOR lnj = 1 TO 100
    an[lnj] = lnj
ENDFOR
getan[@an, 3, 8] && 数组元素3-8,可以随意更改,第三个参数必须大于第二个参数
? an[1], an[2]
FUNCTION getan(ab, b1, b2)
    LOCAL lnj, lnSum, lnMax
    lnSum = 0
    lnMax = 0
    FOR lnj = b1 TO b2
        lnSum = lnSum + ab[lnj]
        lnMax = MAX(ab[lnj], lnMax)
    ENDFOR
    ab[1] = lnMax && 最大值
    ab[2] = lnSum/(b2 - b1 + 1) && 平均值
ENDFUNC
#4
a1999zqw2021-07-19 12:07
回复 3楼 sdta
版主,谢谢您。有个小问题:原数组数值不要修改。另外getan[@an, 3, 8] 中的@an是什么意思,vfp9帮助文件里找不到。
#5
sdta2021-07-19 12:15
以下是引用a1999zqw在2021-7-19 12:07:17的发言:

版主,谢谢您。有个小问题:原数组数值不要修改。另外getan[@an, 3, 8] 中的@an是什么意思,vfp9帮助文件里找不到。

只有本站会员才能查看附件,请 登录
#6
a1999zqw2021-07-19 14:22
看了老半天还是不会。用SET UDFPARMS TO VALUE 原数组数值是保留原有的了,那怎么把计算结果传递给新的数组呢,老师赐教,谢谢。
#7
吹水佬2021-07-19 14:31
用CALCULATE命令算
程序代码:
CREATE CURSOR tt (f1 I)
LOCAL arr[200,1]
FOR i=1 TO ALEN(arr)
    arr[i] = i
ENDFOR
APPEND FROM ARRAY arr
nBegin = 3
nEnd = 8
CALCULATE MAX(f1),AVG(f1) TO nMax,nVag FOR BETWEEN(RECNO(),nBegin,nEnd)
? nMax,nVag
#8
吹水佬2021-07-19 14:35
以下是引用a1999zqw在2021-7-19 14:22:49的发言:

看了老半天还是不会。用SET UDFPARMS TO VALUE 原数组数值是保留原有的了,那怎么把计算结果传递给新的数组呢,老师赐教,谢谢。

这样看看应该明
DIMENSION arr[2]
fun(@arr)
?arr[1]
?arr[2]

FUNCTION fun(arr)
    arr[1] = 123
    arr[2] = 456
ENDFUNC
1