| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3882 人关注过本帖
标题:不用循环能解决吗
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 19楼 fdqzy
看不明
要看具体情况,最好有个示例代码
2020-09-25 19:46
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用瓜瓜1990在2020-9-25 19:02:08的发言:

VFP中函数最多只允许26个参数
另外把函数放在一个过程文件里,set procedure to 使用一次就可以了.

是一个函数允许不超过26个参数,还是在一个程序中所有函数参数的总量?

可否在当这些参数使用后可否释敢这些参数,再调用另外函数中的参数?
2020-09-25 19:54
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用fdqzy在2020-9-25 18:03:50的发言:

关于FUNCTION参数传递超26个的问题:
FUNCTION fun1()
    kk1......
    kk2......
......
    kk20.....
 
    RETURN kk1
ENDFUNC

看似是变量,不是函数的参数
2020-09-25 19:57
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
自定义函数:
程序代码:
FUNCTION fun()
    kdx = OCCURS("_", _1D + _2D + _3D)
    kjo1t = OCCURS("_", _1SYJO1T + _2SYJO1T + _3SYJO1T)
    kjotf = OCCURS("_", _1SYJOTF + _2SYJOTF + _3SYJOTF)
    ksst = OCCURS("_", _1SST + _2SST + _3SST)
    kx5 = OCCURS("_", _1X5 + _2X5 + _3X5)
    ksj = OCCURS("_", _1SJ + _2SJ + _3SJ)
    ksyt = OCCURS("_", _1SYT + _2SYT + _3SYT)
    ksd = OCCURS("_", _1SD + _2SD + _3SD)
    ksq = OCCURS("_", _1SQ + _2SQ + _3SQ)
    ksty = OCCURS("_", _1STY + _2STY + _3STY)
    kstw = OCCURS("_", _1STW + _2STW + _3STW)
    ksz = OCCURS("_", _1SZ + _2SZ + _3SZ)
    ksyf = OCCURS("_", _1SYF + _2SYF + _3SYF)
    ksys = OCCURS("_", _1SYS + _2SYS + _3SYS)
    kp0 = OCCURS("_", _1P0 + _2P0 + _3P0)
    kp1_5 = OCCURS("_", _1P1_5 + _2P1_5 + _3P1_5)
    kp6 = OCCURS("_", _1P6 + _2P6 + _3P6)
    RETURN kdx
ENDFUNC

FUNCTION fun1()
    kdxtj =      IIF('_'$t1._1d and '_'$t2._1d, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._2d and '_'$t2._2d, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._3d and '_'$t2._3d, 1, 0)
    
    kjo1ttj =      IIF('_'$t1._1syjo1t and '_'$t2._1syjo1t, 1, 0)
    kjo1ttj = kjo1ttj + IIF('_'$t1._2syjo1t and '_'$t2._2syjo1t, 1, 0)
    kjo1ttj = kjo1ttj + IIF('_'$t1._3syjo1t and '_'$t2._3syjo1t, 1, 0)
    
    kjotftj =      IIF('_'$t1._1syjotf and '_'$t2._1syjotf, 1, 0)
    kjotftj = kjotftj + IIF('_'$t1._2syjotf and '_'$t2._2syjotf, 1, 0)
    kjotftj = kjotftj + IIF('_'$t1._3syjotf and '_'$t2._3syjotf, 1, 0)
    
    kssttj =      IIF('_'$t1._1sst and '_'$t2._1sst, 1, 0)
    kssttj = kssttj + IIF('_'$t1._2sst and '_'$t2._2sst, 1, 0)
    kssttj = kssttj + IIF('_'$t1._3sst and '_'$t2._3sst, 1, 0)
    
    kdxtj =      IIF('_'$t1._1syt and '_'$t2._1syt, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._2syt and '_'$t2._2syt, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._3syt and '_'$t2._3syt, 1, 0)
    
    kx5tj =      IIF('_'$t1._1x5 and '_'$t2._1x5, 1, 0)
    kx5tj = kx5tj + IIF('_'$t1._2x5 and '_'$t2._2x5, 1, 0)
    kx5tj = kx5tj + IIF('_'$t1._3x5 and '_'$t2._3x5, 1, 0)
    
    ksjtj =      IIF('_'$t1._1sj and '_'$t2._1sj, 1, 0)
    ksjtj = ksjtj + IIF('_'$t1._2sj and '_'$t2._2sj, 1, 0)
    ksjtj = ksjtj + IIF('_'$t1._3sj and '_'$t2._3sj, 1, 0)
    
    ksyttj =      IIF('_'$t1._1syt and '_'$t2._1syt, 1, 0)
    ksyttj = ksyttj + IIF('_'$t1._2syt and '_'$t2._2syt, 1, 0)
    ksyttj = ksyttj + IIF('_'$t1._3syt and '_'$t2._3syt, 1, 0)
    
    ksdtj =      IIF('_'$t1._1sd and '_'$t2._1sd, 1, 0)
    ksdtj = ksdtj + IIF('_'$t1._2sd and '_'$t2._2sd, 1, 0)
    ksdtj = ksdtj + IIF('_'$t1._3sd and '_'$t2._3sd, 1, 0)
    
    ksqtj =      IIF('_'$t1._1sq and '_'$t2._1sq, 1, 0)
    ksqtj = ksqtj + IIF('_'$t1._2sq and '_'$t2._2sq, 1, 0)
    ksqtj = ksqtj + IIF('_'$t1._3sq and '_'$t2._3sq, 1, 0)
    
    kstytj =      IIF('_'$t1._1sty and '_'$t2._1sty, 1, 0)
    kstytj = kstytj + IIF('_'$t1._2sty and '_'$t2._2sty, 1, 0)
    kstytj = kstytj + IIF('_'$t1._3sty and '_'$t2._3sty, 1, 0)
    
    kstwtj =      IIF('_'$t1._1stw and '_'$t2._1stw, 1, 0)
    kstwtj = kstwtj + IIF('_'$t1._2stw and '_'$t2._2stw, 1, 0)
    kstwtj = kstwtj + IIF('_'$t1._3stw and '_'$t2._3stw, 1, 0)
    
    ksztj =      IIF('_'$t1._1sz and '_'$t2._1sz, 1, 0)
    ksztj = ksztj + IIF('_'$t1._2sz and '_'$t2._2sz, 1, 0)
    ksztj = ksztj + IIF('_'$t1._3sz and '_'$t2._3sz, 1, 0)
    
    ksyftj =      IIF('_'$t1._1syf and '_'$t2._1syf, 1, 0)
    ksyftj = ksyftj + IIF('_'$t1._2syf and '_'$t2._2syf, 1, 0)
    ksyftj = ksyftj + IIF('_'$t1._3syf and '_'$t2._3syf, 1, 0)
    
    ksystj =      IIF('_'$t1._1sys and '_'$t2._1sys, 1, 0)
    ksystj = ksystj + IIF('_'$t1._2sys and '_'$t2._2sys, 1, 0)
    ksystj = ksystj + IIF('_'$t1._3sys and '_'$t2._3sys, 1, 0)
    
    kp0tj =      IIF('_'$t1._1p0 and '_'$t2._1p0, 1, 0)
    kp0tj = kp0tj + IIF('_'$t1._2p0 and '_'$t2._2p0, 1, 0)
    kp0tj = kp0tj + IIF('_'$t1._3p0 and '_'$t2._3p0, 1, 0)
    
    kp1_5tj =      IIF('_'$t1._1p1_5 and '_'$t2._1p1_5, 1, 0)
    kp1_5tj = kp1_5tj + IIF('_'$t1._2p1_5 and '_'$t2._2p1_5, 1, 0)
    kp1_5tj = kp1_5tj + IIF('_'$t1._3p1_5 and '_'$t2._3p1_5, 1, 0)
    
    kp6tj =      IIF('_'$t1._1p6 and '_'$t2._1p6, 1, 0)
    kp6tj = kp6tj + IIF('_'$t1._2p6 and '_'$t2._2p6, 1, 0)
    kp6tj = kp6tj + IIF('_'$t1._3p6 and '_'$t2._3p6, 1, 0)
    
    RETURN kdxtj
    
ENDFUNC  


主程序
程序代码:
SET PROCEDURE TO progs\funs.prg  ADDITIVE 
PRIVATE kdx,kjo1t,kjotf,ksst,kx5,ksj,ksyt,ksq,ksty,kstw,ksz,ksyf,ksys,kp0,kp1_5,kp6;
        kdxtj,kjo1ttj,kjotftj,kssttj,kx5tj,ksjtj,ksyttj,ksqtj,kstytj,kstwtj,ksztj,ksyftj,ksystj,kp0tj,kp1_5tj,kp6tj
kdx=0 
kjo1t=0 
kjotf=0 
ksst=0
kx5=0 
ksj=0 
ksyt=0 
ksq=0 
ksty=0 
kstw=0 
ksz=0 
ksyf=0 
ksys=0 
kp0=0 
kp1_5=0 
kp6=0  
kdxtj=0 &&以下是fun1()中的参数
kjo1ttj=0 
kjotftj=0 
kssttj=0
kx5tj=0 
ksjtj=0 
ksyttj=0 
ksqtj=0 
kstytj=0 
kstwtj=0 
ksztj=0 
ksyftj=0 
ksystj=0 
kp0tj=0 
kp1_5tj=0 
kp6tj=0  

超过26个。
到fun1()中的第1个“kdxtj“就不能正常使用了(传递错误值)


[此贴子已经被作者于2020-9-25 20:44编辑过]

2020-09-25 20:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
几十个变量不算多吧
fun1()中的“kdxtj“好像有冲突,出现了两次初始化,第一次无效的
    kdxtj =      IIF('_'$t1._1d and '_'$t2._1d, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._2d and '_'$t2._2d, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._3d and '_'$t2._3d, 1, 0)
   
............
   
    kdxtj =      IIF('_'$t1._1syt and '_'$t2._1syt, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._2syt and '_'$t2._2syt, 1, 0)
    kdxtj = kdxtj + IIF('_'$t1._3syt and '_'$t2._3syt, 1, 0)
2020-09-25 21:00
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 24楼 fdqzy
算法有点复杂,效率并不一定会提高
在 SCAN ... ENDSCAN 中使用几个间接变量来逐条记录处理,效率也差不了多少。

2020-09-25 21:11
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-25 21:11:42的发言:

算法有点复杂,效率并不一定会提高
在 SCAN ... ENDSCAN 中使用几个间接变量来逐条记录处理,效率也差不了多少。

我在16楼就是用类似办法,是因为用循环没有REPL      ALL快,如不行只有这样了。
另外,可否在fun()中的参数用过之后,再用这些参数在fun1()中重新定义解决超26个参数的问题呢?
2020-09-25 21:31
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 27楼 fdqzy
传递参数的最大数目 26
默认的内存变量数目 16384
内存变量的最大数目 65000
你的问题不是“传递参数”,而是“内存变量数”,最多可用到65000个
2020-09-25 21:49
fdqzy
Rank: 1
等 级:新手上路
帖 子:368
专家分:0
注 册:2016-8-15
收藏
得分:0 
以下是引用吹水佬在2020-9-25 21:49:29的发言:

传递参数的最大数目 26
默认的内存变量数目 16384
内存变量的最大数目 65000
你的问题不是“传递参数”,而是“内存变量数”,最多可用到65000个

但是我在前面一个自定义丞数中用25个变量,调用后正常,把第24的个变量放在第二个自定义函数中,再增加几个(总变量超26个),这第24的变量就不能正确传递了。如果是变量,就不是在自定义函数中用参数的办法传递了。把前面自定义函数的变量和賦值放在子程序中调用,行吗?

[此贴子已经被作者于2020-9-26 05:43编辑过]

2020-09-26 04:54
bccn201203
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:3
帖 子:680
专家分:1140
注 册:2012-3-14
收藏
得分:7 
用数组做变量
2020-09-26 06:26
快速回复:不用循环能解决吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026910 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved