标题:优化程序或者从新编写求四生素数中项不能合成的偶数
只看楼主
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
SELECT 4
USE D:\三角递增法\文件起名.DBF ALIAS 文件起名
kssj=SECONDS()
dimension  arr[50]
 For i=6 to 7
      @ 5,12 say i
      SELECT 4
      GO i-1
      arr[i-1]=文件名
       SELECT 3
       DELETE ALL
       PACK
       FOR j=1 TO INT(i/2)
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 @ 15,22 say k2
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 SKIP
                 ENDFOR
               SELECT 1
               GO jl+1
             ENDFOR   
          ENDFOR
       SELECT 3
       GO 1
       select * from 偶数表新.dbf DISTINCT INTO table d:\三角递增法\"arr[i-1]".dbf
       CLOSE ALL Database
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序存在几处错误的地方:
第一,当程序运行完最内两层循环后,出现对话框,让选择打开数据库中的表,选择“偶数表新”后,新建表arr[i-1],不加文本号时,可以运行,但是表文件名就是它,并没有被文件起名表中的文件名代替,然后添加表时,说路径或文件名错误,打开文件夹,把名称手工改写成:偶数唯一表m后,可正常添加。
问题1,如何起个变量文件名,目的不让程序覆盖它。
第二,进入下一个循环时,提示:偶数表新已经在另一个工作区打开,所以不能执行,标记删除,到彻底删除记录那个步骤,程序不能正常执行下去。
问题2:如何知道一个表是否已经在其他工作区被打开了,或者在用某一个表时,提前关闭它(不管它是否在另一个工作区是否打开)。
    这是这个程序遇到的两个问题。
    希望得到大家的指导。

素数问题的解决是我学习编程永恒的动力。
2021-10-23 08:19
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
把文本号去掉后,保存了个arr[i-1]文件名,并不能添加到数据库中,只能重命名后,才可以添加。
CLOSE ALL Database后,倒是进入了,下一个外循环,提示找不到变量“文件名”,我看了下界面,数据库全部关闭了,这样处理也不行。

素数问题的解决是我学习编程永恒的动力。
2021-10-23 08:57
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
即便,不能正常运行。也能完成任务,因为只有50次外循环,无非点击50次键盘就OK了。今天获得前7个表,如果有空,一两天,可以结束战斗。

素数问题的解决是我学习编程永恒的动力。
2021-10-23 14:25
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
 For i=10 to 11
      @ 5,12 say i
      ?bwjm+ALLTRIM(STR(i-1))
       SELECT 3
       DELETE ALL
       PACK
       FOR j=1 TO INT(i/2)
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 @ 15,22 say k2
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 SKIP
                 ENDFOR
               SELECT 1
               GO jl+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
       select * from 偶数表新.dbf DISTINCT INTO table d:\三角递增法\bwjm+ALLTRIM(STR(i-1)).dbf
      CLOSE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
解决了一个关卡,SELECT 3
       USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
这个语句,解决了下一语句,需要打开表文件,这一步骤,在用这句语句前,会出现对话框,打开那个数据库,表文件。
处理,完成后,
CLOSE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
提示信息,有不能识别的短语
已变量赋给文件名,还是没有实现。
所以,也就没有下一步出错的机会,进而找不到原因。

素数问题的解决是我学习编程永恒的动力。
2021-10-23 21:34
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
自己的问题,自己解决。

素数问题的解决是我学习编程永恒的动力。
2021-10-23 21:35
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
学习,可喜可贺!
2021-10-24 05:49
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
回复 66楼 schtg
怕是把你引向歧途,因为这个问题,还没有最终解决。最后,建立一个新表,不能用变量代替,在之前,会出现对话框,提示打开那个表,用后不知道,是否已经关闭,因为进入下一个外循环时,提示表正在用,(或者在另一个工作区已经打开),不能进行下一步处理。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 16:16
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
本题就是化整为零。如果一次性处理50亿内的102949个数据,势必造成拥堵不堪,但是如果,我们把它划分成100份,或者1000份,那就可以轻装上阵,不用面面俱到,只处理部分,不处理整体,分散处理,比起集中处理要快的多,这个算法就是加两个数,看结果分布情况,对于现在的编程,和计算机技术来说,这是非常简单的事情。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 17:22
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
打个比方,10000的数,如果10000*10000=1个亿,如果划分成100份,每份只有100个数据,100*100=10000个数据,那处理起来,几乎惊人,那是10000倍的量,有多大,可想而知。所以,化整为零,是一个不错的选择。

素数问题的解决是我学习编程永恒的动力。
2021-10-24 17:26
独木星空
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:河北省曲阳县
等 级:版主
威 望:57
帖 子:713
专家分:556
注 册:2016-6-29
得分:0 
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
 For i=16 to 17
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
       SELECT 3
       DELETE ALL
       PACK
       FOR j=1 TO INT(i/2)
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=四中
               jl=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 SKIP
                 ENDFOR
               SELECT 1
               GO jl+1
             ENDFOR   
          ENDFOR
       SELECT 3
       select * from 偶数表新.dbf DISTINCT INTO table d:\三角递增法\&wd.dbf
      
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序给建了个新表:偶数唯一表15dbf,看来,后缀不需要加。
另外就是:当内两层循环完成后,仍就有对话框,打开那个表。
进入,下一个循环时,提示:文件已在另一个工作区打开(所以,彻底删除语句不能执行)

素数问题的解决是我学习编程永恒的动力。
2021-10-24 18:16



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507201-1-1.html




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

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