数学中国

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

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

  [复制链接]
发表于 2010-5-13 10:57 | 显示全部楼层

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

白新岭:您好!
下面把程序贴上。
CLEAR
SELECT 1
USE D:\nabaoj\白新岭\白新岭表.DBF EXCL ALIAS 白新岭
ZAP
SELECT 2
USE D:\nabaoj\随机素数表.DBF ALIAS 素数表
INPUT "请输入预先值 K= " TO yxk
INPUT "请输入步长值 bcz= " TO bcz
INPUT "请输入初始值 csz= " TO csz
INPUT "请输入外循环起始值 xks= " TO xks
INPUT "请输入外循环终结值 zds= " TO zds
kssj=SECONDS()
FOR i=xks TO zds
bpz=csz+(i+yxk)*bcz
Kf=INT(SQRT(bpz))
SELECT 素数表
LOCATE FOR 素数>=kf
DO CASE
CASE EOF()
GO BOTTOM
CASE素数>kf
SKIP -1
ENDCASE
SSS=RECNO()
GO 2
FOR j=2 TO SSS
qmz= MOD(bpz,素数)
IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8
mss=素数
SELECT 白新岭
APPEND BLANK
REPLACE 外环值 WITH i
REPLACE 被判值 WITH bpz
REPLACE 开方根 WITH kf
REPLACE 素数 WITH mss
REPLACE 余数 WITH qmz
EXIT
ENDIF
SKIP
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
SELECT 白新岭
BROWSE
CLEAR ALL
发表于 2010-5-13 11:08 | 显示全部楼层

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

白新岭 ,人家vfbpgyfk 把程序写得那样“清细”了,你怎么还不清楚啊?!
 楼主| 发表于 2010-5-13 13:53 | 显示全部楼层

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

下面引用由trx2010/05/13 11:08am 发表的内容:
白新岭 ,人家vfbpgyfk 把程序写得那样“清细”了,你怎么还不清楚啊?!
你-滕瑞雄怎么知道我不清楚。我已经清楚了,你是否也会编程,会的话,请你指出我邀请的先生编的程序哪里不符合。
 楼主| 发表于 2010-5-13 14:03 | 显示全部楼层

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

我们来这里是为了交流各自的思想,思路,观点,是交流,而不是把自己的观点强加于人。在数学中国中,我请求luyuanhong教授一个同样的编程问题,教授没有反应,自己就知道教授为难了,答复吧,可能自己也不会,不答复吧,自己的名誉在哪儿,左右为难,所以自己就改了主题,是“请教一个编程问题”,这样会使那些乐意助人为乐的编程爱好者得以施展自己的才华。
滕瑞雄,你的做法就不同了,开始是邀请,当一当对方没有回应,或说对这方面没有研究时,就立马改了一种态度。我认为,有来有往是客,有来无往也是客,我们总不能把自己的爱好与观点都强加于别人。
发表于 2010-5-13 14:13 | 显示全部楼层

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

白新岭  与vfbpgyfk ,祝愿你俩精心讨论,讨论,再讨论,争取取得惊天之成就来!!
 楼主| 发表于 2010-5-13 14:23 | 显示全部楼层

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

下面引用由trx2010/05/13 02:13pm 发表的内容:
白新岭  与vfbpgyfk ,祝愿你俩精心讨论,讨论,再讨论,争取取得惊天之成就来!!
谢谢您,我们会让你的祝愿变为现实。
 楼主| 发表于 2010-5-13 15:00 | 显示全部楼层

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

[这个贴子最后由白新岭在 2010/05/13 03:03pm 第 1 次编辑]
下面引用由vfbpgyfk2010/05/13 10:57am 发表的内容:
白新岭:您好!
下面把程序贴上。
CLEAR
SELECT 1
...
从程序运行结果看,你编的程序还有不对的地方,因为你从0到99之间的100次外循环中一个符合条件的都没有,而实际上有两个是符合要求的,是两组四胞胎素数的代表值:n=7,19+7*210=1489,n=90,19+90*210=18919.
最后,程序应该显示数值2,而且储存表中应有这两个数,而不是显示所有被判值在那个素数上出现了余数0,或2,或6,或8。
 楼主| 发表于 2010-5-13 15:42 | 显示全部楼层

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

我对IF qmz=0 or qmz=2 orqmz=6 or qmz=8
mss=素数。
这一步不理解,从这个编程语言看,好像是说,被判断值对素数取模后,其余数如果占四个预先给的余数之一,就把该素数赋值给mss这个变量。
而我给出的步骤并不是这样,在我给的步骤中,应该是当调取某一个素数时,如果余数不在预先给的余数中(0,2,6,8),就调取下一个素数,当调取完所有根号前的素数时,还没有出现相同的余数时(与预先给的余数0,2,6,8比较),这时就输出被筛选值,并累计计数,最后显示累计计数值。
发表于 2010-5-13 17:16 | 显示全部楼层

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

白新岭:您好!
为了让您更好地理解程序,这回我在每条语句后面都加上了注解(&&后面的内容),前面和后面或中间没有注解的,要么一看就明白,要么是程序格式需要等,后面最长的那条语句,是显示运行时间的,都与计算无关。
同时还传上200内的计算结果。K=0;步长=210;初始值=19
CLEAR
SELECT 1
USE D:\nabaoj\白新岭\白新岭表.DBF EXCL ALIAS 白新岭
ZAP
SELECT 2
USE D:\nabaoj\随机素数表.DBF ALIAS 素数表
INPUT "请输入预先值 K= " TO yxk
INPUT "请输入步长值 bcz= " TO bcz
INPUT "请输入初始值 csz= " TO csz
INPUT "请输入外循环起始值 xks= " TO xks
INPUT "请输入外循环终结值 zds= " TO zds
kssj=SECONDS()                                  &&取出开始时间
FOR i=xks TO zds                                &&外循环开始
bpz=csz+(i+yxk)*bcz                         &&计算被判断值
Kf=INT(SQRT(bpz))                           &&求出被判断值的开方根
SELECT 素数表                               &&打开素数表
LOCATE FOR 素数>=kf                         &&根据开方根,查找最大素数
DO CASE
CASE EOF()                              &&如果超出素数表最后一条记录
GO BOTTOM
CASE 素数>kf                            &&如果找到的素数比开方根值大,就将记录指针退回一个,保证使用的最大素数在开方根内
SKIP -1
ENDCASE
SSS=RECNO()                                 &&记录下最大素数(开方根内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
GO 2                                        &&从第二条记录开始读取素数(3)
FOR j=2 TO SSS                              &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
qmz=MOD(bpz,素数)                      &&以读取的素数为条件,对被判断值求模
IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8     &&如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP)
mss=素数                            &&********记下使用的素数***********
SELECT 白新岭                       &&打开保存求解结果的信息表
APPEND BLANK                        &&增加一条空记录
REPLACE 外环值 WITH i               &&将外循环数值保存到外循环字段中(外循环数据栏)
REPLACE 被判值 WITH bpz             &&将被判断值保存到被判断值字段中(被判断值数据栏)
REPLACE 开方根 WITH kf              &&将开方根保存到开方根字段中(开方根值数据栏)
REPLACE 素数 WITH mss               &&将素数值保存到素数值字段中(素数值数据栏)
REPLACE 余数 WITH qmz               &&将余数值保存到余数值字段中(余数值数据栏,qmz=MOD(bpz,素数))
EXIT                                &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP                                    &&素数表指针向下移动一个
ENDFOR
ENDFOR
=MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
SELECT 白新岭
BROWSE
CLEAR ALL
 楼主| 发表于 2010-5-14 09:28 | 显示全部楼层

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

IF qmz=0 OR qmz=2 OR qmz=6 OR qmz=8     &&如果符合这四个约定条件之一,就进行相应工作.如果一个也没有符合条件的,直接使记录指针向下移动一个(SKIP)
mss=素数                            &&********记下使用的素数***********
SELECT 白新岭                       &&打开保存求解结果的信息表
APPEND BLANK                        &&增加一条空记录
REPLACE 外环值 WITH i               &&将外循环数值保存到外循环字段中(外循环数据栏)
REPLACE 被判值 WITH bpz             &&将被判断值保存到被判断值字段中(被判断值数据栏)
REPLACE 开方根 WITH kf              &&将开方根保存到开方根字段中(开方根值数据栏)
REPLACE 素数 WITH mss               &&将素数值保存到素数值字段中(素数值数据栏)
REPLACE 余数 WITH qmz               &&将余数值保存到余数值字段中(余数值数据栏,qmz=MOD(bpz,素数))
EXIT                                &&因为符合条件,则做完相应工作后跳出内循环
ENDIF
SKIP                                    &&素数表指针向下移动一个
从我复制的内容开始,好像程序不是按照我的意思或思路进行的,(在一个你可以从第5个素数11开始,素数3,素数5,素数7,被判断值是可以通过的)如果符合这四个约定条件之一,就进行相应工作,如果一个一个也没有符合条件的,直接使记录指针向下移动一个(skip),“相应的工作是”下面一系列的操作吗?如果是,那就大错特错了,它不会完成任何任务。
我已经对这里提出疑问,也许我说的不清楚。
这一句应该改成,如果没有符合这四个约定条件之一,即它对当前调入的素数,所求余数不在它们四个余数当中(0,2,6,8),则继续执行下一步,让指针指向下一个素数(即素数序号增加1,继续做同样的动作),这样反复进行下去,直到取完最后一个符合条件的素数为止(限制条件是小于或等于被判断值的开方值,还有一个起步问题,这里定为从素数11开始),到此时还没有找到相同的余数,则做相应工作-----在被判断值表中增加一条记录,并保存该值(与增加一条记录同意),当完成全部外循环工作后,在屏幕上显示被判断值表保存的记录条数,也就是符合要求的被判断值的个数。
另外在,内循环上,无论从什么位置出现余数与四个约定数相同时,都无条件的结束内循环,跳到下一个外循环上去,不做任何工作(或操作,指记录那个素数啦,被判断值啦,余数啦,这些都不做)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-7 07:03 , Processed in 0.070313 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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