数学中国

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

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

  [复制链接]
发表于 2021-10-23 12:03 | 显示全部楼层
定义数组命令:declare或者dimension命令。
1.dimension命令
dimension  ar (10)  :
定义一个一维数组ar,该数组有10个元素,数组下标从1开始。
dimension ab[3,2]    :
定义一个二维数组ab,该数组有6个元素。
2.declare命令
declare a(3,4):

定义一个二维数组a,该数组有12个元素。
数组内容
回复 支持 反对

使用道具 举报

发表于 2021-10-23 12:04 | 显示全部楼层
标记法主题思路,标记法是把符合条件的标记为假flase,而不符合条件的标记为真,在vfp中是这样实现这个过程的,先用
本轮参与运算的,求出最大开方值,然后查出所在记录条位置,由此记录条作为筛选循环总次数,第一次现由源数据,加周
期值9699690(即2*3*5*7*11*13*17*19=9699690,一次性调入1658880个数据(就这些需要判断是否为素数,其余的已经被排
除掉了)。有了循环次数,有了被筛选数据,进入主要循环体,先调入第一个素数,划掉其倍数,其余的存入数据b(从数据
源先调入数据a),然后调入第二个素数,排查数据b中符合条件的,剩余的存入数据a(当然每次存数据以前,要把数据表先
清空),循环往始,直到调入最后一个素数为止。然后把最后存的数据,抄写到素数结果表。
进入下一批数据调入,即把数据源加一个周期值9699690,先判断开方值,把小于等于开方值的记录条作为本次的素数调入个
数的依据(即本次的排查次数),进入同样的循环,获得结果,抄写到素数结果表。直到全部周期结束为止。
外循环为周期数,内循环为开方值记录条数减去素数19前的个数8,比方开放值以内有1000个素数,则内主体循环次数为:
1000-8=992次,当然随着循环周期的扩大,内循环次数增多。内循环单次,需要判断值逐步减少,例如第一次调入1658880个
值,大概有1658880/23=72125数被去掉,1658880-72125=1586755/29=54715数被筛掉,这样下去,越往后被判断数越少。所以
成倒排三角形数据量。把最后剩余的数据存放在素数结果表中即可。
外循环步长9699690,即一次性可以判断这样的自然数段。
回复 支持 反对

使用道具 举报

发表于 2021-10-23 12:09 | 显示全部楼层
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=8 to 9
      @ 5,12 say i
      SELECT 4
      GO i-1
      arr[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 D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
此程序,基本已经成形,只有个别的地方,需要进一步处理。
比如建一个新表,如何建成像变量那样的表明。
如何把打开的工作区间关闭掉,当进入第二次外循环时,可以顺利的打开工作区,对表进行操作。
回复 支持 反对

使用道具 举报

发表于 2021-10-23 14:07 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\四生素数表中分层.DBF ALIAS 四中表分层
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 102949
      @ 5,12 say i
    SELECT  1   
    && jl=recno()
    PUBLIC A
    A=四中
    B=INT(A/210)
    C=MOD(A,210)
         SELECT 2
         APPEND BLANK     
         REPLACE 整数 WITH B
         REPLACE 余数 WITH C
   SELECT 1
   skip
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-23 14:13 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中分层.DBF ALIAS 四中表分层
SELECT 2
USE D:\三角递增法\偶数双表.DBF ALIAS 偶数双表
kssj=SECONDS()
SELECT  1
GO 1
For i=1 to 1000
      @ 5,12 say i
    SELECT  1     
    jl=recno()
    A=整数
    B=余数
          SELECT  1
          GO 1
          For j=1 to 1000
          @ 15,22 say j
          C=整数
          D=余数
          E=A+C+INT((B+D)/210)
          F=MOD(B+D,210)
              SELECT 2
              APPEND BLANK   
              REPLACE 偶整 WITH E  
              REPLACE 偶余 WITH F
           SELECT 1
           SKIP
           ENDFOR
   SELECT 1
   GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
回复 支持 反对

使用道具 举报

发表于 2021-10-23 21:35 | 显示全部楼层
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-24 21:41 | 显示全部楼层
vfbpgyfk 发表于 2010-5-10 15:48
白新岭:您好!
我看到您的贴子啦。待我分析和理解后,再与您沟通。

看来,今日,先生一定非常忙,没有顾着看邮箱,也无法联系到您。
回复 支持 反对

使用道具 举报

发表于 2021-10-25 07:01 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
For i=26 to 27
      @ 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
           use  D:\三角递增法\偶数表新.dbf
           BROWSE LAST
          && OPEN DATABASE D:\三角递增法\偶数表新
       select * from  D:\三角递增法\偶数表新.dbf DISTINCT INTO table d:\三角递增法\&wd
      USE IN &wd
      SELECT 3
      USE D:\三角递增法\偶数表新.dbf
       && CLOSE DATABASES D:\三角递增法\偶数表新
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这个程序可以正常运行了!不知道,是否还会出现第二次开玩笑不?改变,一下外循环值,再出现其他的对话框,提示语,我真的就无语了。运行时间:11分51.56秒。
    以前,对话框:打开那个表,手动选择:偶数表新;
    提示:已经在另一个工作区打开
    提示:有不能识别的短语
回复 支持 反对

使用道具 举报

发表于 2021-10-25 08:43 | 显示全部楼层
SELECT 1
USE D:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE D:\三角递增法\各段四生素数个数.DBF ALIAS 四生个数表
SELECT 3
USE D:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
For i=28 to 29
      @ 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
           use  D:\三角递增法\偶数表新.dbf
           BROWSE LAST
          && OPEN DATABASE D:\三角递增法\偶数表新
       select * from  D:\三角递增法\偶数表新.dbf DISTINCT INTO table d:\三角递增法\&wd
      USE IN &wd
      SELECT 3
      USE D:\三角递增法\偶数表新.dbf
       && CLOSE DATABASES D:\三角递增法\偶数表新
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
用时:13分15.22秒
回复 支持 反对

使用道具 举报

发表于 2021-10-25 14:19 | 显示全部楼层
SELECT 1
USE G:\三角递增法\四生素数表中.DBF ALIAS 四中表
SELECT 2
USE G:\三角递增法\各段四生素数个数细分.DBF ALIAS 四生个数表细分
SELECT 3
USE G:\三角递增法\偶数表新.DBF ALIAS 偶数表新
kssj=SECONDS()
bwjm="偶数唯一表"
For i=21 to 30
      @ 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=四中
               jl1=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=四中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3 &&打开,或关闭,那个工作区(或者,写别名)
      
       select * from 偶数表新.dbf DISTINCT INTO table G:\三角递增法\&wd
      USE IN &wd
      SELECT 3
      USE IN 3
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
基本,可以运行了。需要手动选择:偶数表新
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-19 12:21 , Processed in 0.100872 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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