| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 796 人关注过本帖, 1 人收藏
标题:请求表数据筛选问题
只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
收藏(1)
已结贴  问题点数:20 回复次数:13 
请求表数据筛选问题
先生您好,我有这样一个问题:在32行4列的表中,选出16行,再求出这被选中的16行按列求和(和分别为lh1、lh2、lh3、lh4),并当lh1=lh2且lh3+7864320=lh4时才算符合要求,我编了段代码,虽可运行,但总是找不到符合要求的结果,请先生指点,谢谢(代码如下)

CLEAR
CLOSE  all
SET SAFETY OFF
USE 新表
ZAP
input '        请输入想搜索的循环次数!:' to 循环次数
*-------------以下一行是最外层循环开始
FOR JJJ=1 TO 循环次数
USE 原表
RAND(-1)
FOR i=1 TO 32
REPLACE 随机数  WITH  RAND()*VAL(SYS(2))*0.000357913
SKIP
ENDFOR
sort to 排序 ON 随机数/A
USE 排序
copy to 排序后 FIELDS 列1,列2,列3,列4
USE  排序后
 Dimension sb(16,4)
select * from 排序后 into array sb
lh1=0
lh2=0
lh3=0
lh4=0
 FOR n=1 TO 16
    lh1=lh1+sb(n,1)
    lh2=lh2+sb(n,2)
    lh3=lh3+sb(n,3)
    lh4=lh4+sb(n,4)
 ENDFOR
 IF lh1=lh2 AND lh3+7864320=lh4                                 
     SELECT  2
    USE 新表
        FOR i=1 TO 16
              APPEND BLANK                                               
              REPLACE  列1 WITH  sb(i,1)
              REPLACE  列2 WITH  sb(i,2)   
              REPLACE  列3 WITH  sb(i,3)   
              REPLACE  列4 WITH  sb(i,4)   
         ENDFOR                                          
     ELSE     
     LOOP      
 ENDIF
 *-------------以下是最外层循环结尾
CLOSE  all
ENDFOR
 MESSAGEBOX('本 次 运 行 结 束 !!',64,'信息提示')
 DELETE FILE *.BAK
QUIT
新表.rar (485 Bytes)
原表.rar (1.09 KB)


[ 本帖最后由 fdxxhjc 于 2015-9-12 09:48 编辑 ]
2015-09-12 09:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:7 
选中的16行是什么意思,是随机编号为1-16所在行的记录吗

坚守VFP最后的阵地
2015-09-12 13:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:7 
32条记录任选16条记录的组合?
2015-09-12 15:51
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 3楼 吹水佬
如果求32中16的组合,数值太大了,无法运行,故想碰运气随机取出16行进行搜索,谢谢
2015-09-14 10:47
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 2楼 sdta
先生是的,谢谢
2015-09-14 10:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 4楼 fdxxhjc
有无符合条件的记录组合?
试了一下,记录号从7开头之后的还没找到符合条件的组合,不知算法对否。
记录号1--4开头的可能要慢慢试,PC机+VFP32位数据处理规模很有限。
2015-09-15 10:22
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
终于在记录号5开头的找到符合条件的一组记录:
图片附件: 游客没有浏览图片的权限,请 登录注册

验证:
USE 原表
SUM 列1,列2,列3,列4 FOR INLIST(RECNO(),5,7,8,9,14,15,18,20,21,23,24,25,26,28,30,31) TO n列1,n列2,n列3,n列4 
? n列1,n列2,(n列3 + 7864320),n列4
2015-09-15 11:12
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:298
专家分:808
注 册:2012-6-15
收藏
得分:7 
是你的原始数据有问题,你的原始数据里,没有符合你所给出的条件lh1=lh2且lh3+7864320=lh4这样的数据项,所以程序虽可运行,但是找不到符合要求的结果!

学习交流VFP,QQ:248561326。
2015-09-15 11:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 8楼 cxzbzgz
我刚找到有一组符合条件的哦?
继续......难度越来越大,不知能否完成。
2015-09-15 11:27
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
有三组记录符合条件
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-09-16 14:17
快速回复:请求表数据筛选问题
数据加载中...
 
   



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

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