数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: 白新岭

[原创]请教vfbpgyfk先生一个编程问题

  [复制链接]
发表于 2010-5-24 20:52 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

今天有事,还没有看邮箱。
关于“next与endfor是相同的”。这可能是VFP8的规定,VFP6没看见有这种语法。
在我对程序注解中已经说到:实质上您不是调用了序号值,而是外循环值。作法应该是读取某个字段的值,如:MOD(pdz,素数),这里的“素数”就是字段名。当外循环到某个值时,记录指针就应该到相同(当设置相同时),程序就调用了这行的“素数”。如:当记录指针为5时,这时的“素数”=11,仍以MOD(pdz,素数)为例,则是:MOD(pdz,素数)=MOD(pdz,11)。
注意:当完成一个外循环计算后,一定在适当位置加上“SKIP”,没有这个语句,记录指针就不会向下移动一个记录。
 楼主| 发表于 2010-5-25 10:50 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

今天用下面的程序得到了1/3的数据,它没有对第二条记录及第三条记录进行处理,只对第一条记录值19进行了处理,不知是何种原因造成的。
CLEAR
SELECT 1
USE f:\MYVFP\学习VFP\生成初始值11.DBF ALIAS 生成初始值10
SELECT 2
USE f:\MYVFP\学习VFP\生成初始值7.DBF ALIAS 生成初始值6
*INPUT "请输入外循环开始值 wxhks=" TO wxhks
*INPUT "请输入外循环结束值 wjs=" TO wjs
*INPUT "请输入内循环开始值 nks=" TO nks
*INPUT "请输入内循环结束值 njs=" TO njs
*INPUT "请输入参考素数    ckss=" TO ckss
*INPUT "请输入被判断值     bpz=" TO bpz
FOR h=0 to 10
SELECT 生成初始值6
  FOR j=生成元7 to 生成元7
   bpz=j+h*210
   qmz=MOD(bpz,11)
   IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8
    exit
    else
     SELECT  生成初始值10               &&打开保存求解结果的信息表
     APPEND BLANK                        &&增加一条空记录
     REPLACE 生成元11 WITH bpz           &&将符合条件的值bpz保存到生成元11字段中去(生成初始值11.)
    ENDIF
  skip
  NEXT
NEXT
&&在这个程序中,没有对字段生成元7中的第二条记录和第三条记录进行处理,只处理了第一条记录,这是为何?
运行结果在生成初始值11的表中生成元11的字段下新增了7条记录,都是预期已知的(即那11个被判断值中,一定有4个被筛除掉,留下7个符合条件的)。
我的问题是:如何才能把第二条记录也同样处理一次(还有第三条,指生成元7的3条记录)
229
439
859
1279
1489
1699
2119
这是运行结果。
发表于 2010-5-25 15:21 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

今天用下面的程序得到了1/3的数据,它没有对第二条记录及第三条记录进行处理,只对第一条记录值19进行了处理,不知是何种原因造成的。
CLEAR
SELECT 1
USE f:\MYVFP\学习VFP\生成初始值11.DBF ALIAS 生成初始值10
SELECT 2
USE f:\MYVFP\学习VFP\生成初始值7.DBF ALIAS 生成初始值6
*INPUT "请输入外循环开始值 wxhks=" TO wxhks
*INPUT "请输入外循环结束值 wjs=" TO wjs
*INPUT "请输入内循环开始值 nks=" TO nks
*INPUT "请输入内循环结束值 njs=" TO njs
*INPUT "请输入参考素数    ckss=" TO ckss
*INPUT "请输入被判断值     bpz=" TO bpz   &&被判断值是计算得到,不是输入的。
FOR h=0 to 10
SELECT 生成初始值6      &&打开的是“生成初始值7”
*FOR j=生成元7 to 生成元7  &&这里什么意思?从下面的语句来分析,应该是想从开始值表中取开始值
*如果是,应该写作:
FOR j=1 TO 3
*先把字段名定主为“初始值”,您按照“生成初始值6”表中的字段名替代“初始值”
*  bpz=j+h*210  &&发作如下:
bpz=初始值+h*210
qmz=MOD(bpz,11)
IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8
   exit
ENDIF
SKIP
ENDFOR
IF j>3
*else                                &&不能放在内循环的判断中。
SELECT  生成初始值10               &&打开保存求解结果的信息表
    APPEND BLANK                        &&增加一条空记录
    REPLACE 生成元11 WITH bpz        &&将符合条件的值bpz保存到生成元11字段中去(生成初始值11.)
ENDIF
* skip
NEXT          &&我认为用ENDFOR好。这样好读程序。即FOR开始,ENDFOR结束。
NEXT
从这以后已经不是程序啦,没有必要写“&&”。在这个程序中,没有对字段生成元7中的第二条记录和第三条记录进行处理,只处理了第一条记录,这是为何?
运行结果在生成初始值11的表中生成元11的字段下新增了7条记录,都是预期已知的(即那11个被判断值中,一定有4个被筛除掉,留下7个符合条件的)。
我的问题是:如何才能把第二条记录也同样处理一次(还有第三条,指生成元7的3条记录)
229
439
859
1279
1489
1699
2119
这是运行结果。
***************
依照您的程序思路,综合程序如下:
*****************************************以下是程序
CLEAR
SELECT 1
USE f:\MYVFP\学习VFP\生成初始值11.DBF ALIAS 生成初始值11  &&最好统一,便于读
SELECT 2
USE f:\MYVFP\学习VFP\生成初始值7.DBF ALIAS 生成初始值7     &&同上
INPUT "请输入外循环开始值 wxhks=" TO wxhks  &&有这个设置,就要用上,详见程序。(输入值为1)
INPUT "请输入外循环结束值 wjs=" TO wjs      &&同上(输入值为3)
INPUT "请输入内循环开始值 nks=" TO nks      &&同上(输入值0)
INPUT "请输入内循环结束值 njs=" TO njs      &&同上(输入值10)
*INPUT "请输入参考素数    ckss=" TO ckss    &&本程序没有用
*INPUT "请输入被判断值     bpz=" TO bpz     &&被判断值是计算得到,不是输入的。
FOR h=wxhks to wjs          &&这样做免去频繁打开表
SELECT 生成初始值7          &&到底是打开“生成初始值6”表,不是“生成初始值6”表,落实6或7后,改为相应数。如果此程序,应该是“生成初始值7”
FOR j=nks TO njs            &&内循环是0~10
qmz=MOD(初始值+h*210,11)    &&直接计算,并求模(余)
IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8
exit
ENDIF
SKIP
ENDFOR
IF j>3
SELECT  生成初始值11           &&打开保存求解结果的信息表(本程序应该是11)
APPEND BLANK                   &&增加一条空记录
REPLACE 生成元11 WITH bpz      &&将符合条件的值bpz保存到生成元11字段中去(生成初始值11.)
ENDIF
ENDFOR
************************************************以上是程序
注意:
1、需将qmz=MOD(初始值+h*210,11)中的“初始值”改为“生成初始值7”表中的字段名。这个很关键,就是您不能调用表中信息的根本原因。
2、落实“生成初始值7”中的数字,是6还是7,还有“生成初始值11” 中的数字,是10还是11
3、外循环是1到3;内循环是0到10。
 楼主| 发表于 2010-5-25 17:10 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

[这个贴子最后由白新岭在 2010/05/25 05:24pm 第 2 次编辑]
下面引用由vfbpgyfk2010/05/25 03:21pm 发表的内容:
今天用下面的程序得到了1/3的数据,它没有对第二条记录及第三条记录进行处理,只对第一条记录值19进行了处理,不知是何种原因造成的。
CLEAR
SELECT 1
USE f:\MYVFP\学习VFP\生成初始值11.DBF ALIAS 生成初始值1 ...
按照您给改写的程序什么也没有得到,提示已经到结尾了,错误显示光标指着“skip"
其实这个程序很简单,需要完成的任务是,把一个已经存放着记录的表打开,这个存放记录的表有n条记录,在程序中有一个外循环值m,这个外循环是从0到m,即需要循环(m+1),这样两两组合成一个算术式,共形成n*(m+1)个新值,在内循环中需要做的事,把符合条件的新值存放到预先设计好的表中,这个表也只有1个字段,不符合条件的去掉,不保存。怎么能把外循环的值提供给内循环,让条件语句对它处理,对每个外循环值都处理m+1次。从这里可以看出,应该是内循环处理一周=m+1次,外循环就向下移动一条记录。
 楼主| 发表于 2010-5-25 17:52 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

请先生把我通过邮箱传过去的Excel文件翻译成vfp程序文件。
在保存符合条件的表中只用一个字段(无需分别到底是有那个初始值得到的新值)
不保存0值(即被筛选掉的新值)。
发表于 2010-5-25 22:01 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

白新岭:您好!
请在“FOR h=wxhks to wjs          &&这样做免去频繁打开表”前面插入一条语句:
GO Top
FOR h=wxhks to wjs          &&这样做免去频繁打开表
就解决问题啦。
 楼主| 发表于 2010-5-26 11:36 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

我已按先生编好的程序在我的电脑上进行了运行,结果是我需要的数据。
衷心的谢谢您最近不辞劳苦的帮助。
另外在我的电脑上出现了与先生一样的问题,表(生成初始值7)不能打开,提示“不能识别”,在记事本中,是这样注解的:

第 2 行发生错误: 不能识别的命令谓词。
发表于 2010-5-26 11:49 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

我的分析可能是因为后面的数值与前面的文字间存有空格造成的,您检查看看。
 楼主| 发表于 2010-5-26 12:11 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

先生既然这样帮助我,我也应该坦诚对待先生。
在这个:二维程序中,它产生的新初始值就是可能产生四胞胎素数群的那个代表值,在去掉的位置上(新值上,被判值上)是不会产生的。
这样,从7到11,再从11到13,....,很快就可以把有可能产生四胞胎素数群的代表值,即初始值找到,我们可以只对这些初始值进行进一步的筛选,而对与其他的就不在处理了,这样就省了好多时间。在以前,在210步长内只有19,109,199三个初始值,当到11时,即步长为210*11=2310时,会有3*(11-4)=21个初始值,意思是说,在2310周期内,只有21个初始值可能是四胞胎素数群的代表值;同理,在步长为2310*13=30030时,会有21*(13-4)=189个初始值,意思是说,在30030周期内,只有189个初始值可能是四胞胎素数群的代表值;同理,在步长为30030*17=510510时,会有189*(17-4)=2457个初始值,意思是说,在510510周期内,只有2457个初始值可能是四胞胎素数群的代表值;同理,在步长为510510*19=9699690时,会有2457*(19-4)=36855个初始值,意思是说,在9699690周期内,只有36855个初始值可能是四胞胎素数群的代表值;同理,在步长为9699690*23=223092870时,会有36855*(23-4)=700245个初始值,意思是说,在223092870周期内,只有700245个初始值可能是四胞胎素数群的代表值;同理,在步长为223092870*29=6469693230时,会有700245*(29-4)=17506125个初始值,意思是说,在6469693230周期内,只有17506125个初始值可能是四胞胎素数群的代表值;
到此,我们可以停了,一次外循环就可以解决64.7亿的数据,而之针对性的对17506125个数据进行处理,按已往的处理速度推算,要100亿内的数据,也就2天的时间,不会超过48小时,这要比一天仅处理30亿内的1/3的数据要快的多。它只处理1/10的数据,而后边的可以处理1/2的数据,相差悬殊。
对于这里的理论根据,是可以证明的。
从整个编程的数学根据上看,编程得到的结果(数据)与实际数据完全一致上看,此数学依据是完全正确的。
发表于 2010-5-26 12:24 | 显示全部楼层

[原创]请教vfbpgyfk先生一个编程问题

首先祝贺您。
如果还有需要帮助的,我会尽力的,我的信箱您知道,只不过不知什么原因,您发来的邮件有时打不开。我的方法是:点击“附件”,再双击需要发的文件(如果不能被识别的,系统就提示啦),就这样简单。
我想,由于《哥德巴赫猜彻底被初等数学证明》出笼,我在这方面所用的精力将会减少,主要任务是答疑事宜,或者处理新出现的问题。所以,空闲时间可能多些。
对啦,您对这个发现有何赐教?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-7-2 06:20 , Processed in 0.096758 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表