数学中国

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

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

  [复制链接]
 楼主| 发表于 2020-10-8 08:24 | 显示全部楼层
VB中Str()的作用
Str()的作用是将bai数字型变du量或常量改变成字符型变量或常量。
Str()的作用是将数字bai型变量或常量改变成字符型du变量或常量,举例如下:

对于常量:str(35)=" 35 ",str(-5.5)="-5.5 ",以此zhi类推。(注意字符串" 35"的前面有一dao个空格。

对于变量:则把变量的值变成字符串,如:假定A =287,则str(A)=" 287 ",以此类推。(注意前面也有空格)
对于str(ABC),因为ABC不是数字,所以vb系统就把它当成变量ABC,就去调ABC的值,因从未对ABC赋值,系统默认为0,所以就把那个0转化成字符串了,?Str(ABC) 就打印出字符串" 0"(前面有一个空格)。
str()函数的反函数是什么?
val()函数
str()函数是将数值转字符,val()函数是将数字字符转数值型
追问:把字符型转换为数值型的函数,如字符型2012转换成数值型2012
追答
val("2012")=2012
应该能办文本数字字符串前头空格去掉
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-8 08:30 | 显示全部楼层
求100以内的偶数和
CLEAR
s=0
FOR i=1 TO 100
  IF i%2=0
  s=s+i
  ELSE
  LOOP
  ENDIF
ENDFOR
?s
return
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 11:09 | 显示全部楼层
一个数列有20个数据,第一个的值是0,第二个的值是1,第三个的值是前两个的和,即数列递推关系式:a(n)=a(n-1)+a(n-2)
如果不用数组,我尝试了,无法求出a(20)的值。用数组还可以。程序如下:
CLEAR
dimension a(20)
a(1)=0
a(2)=1
FOR i=3 TO 20
a(i)=a(i-1)+a(i-2)
ENDFOR
?a(20)
return
开始我是:?a(i)    运行结果提示:下标已经超范围。后来改成了?a(20)  (前述问题可能是循环结束后,i=21)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 19:27 | 显示全部楼层
clear
SELECT 1
USE D:\VFP温习\素数表.DBF ALIAS 素数表
kssj=SECONDS()
    SELECT  1     &&打开盛放素数式的表
    A=素数
    SKIP 47
    B=素数
    zx=B-A
    GO 2
    For i=1 to 23876
      @ 5,12 say i
      jl=recno()
      PUBLIC D
      D=素数
      SKIP 47
      PUBLIC E
      E=素数
      F=E-D
      zx=MIN(F,zx)
      GO jl+1
    ENDFOR
    ?zx
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是求一定素数个数跨过自然数段的最小值。在523的平方内。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 19:55 | 显示全部楼层
个数跨度        间距        个数
43        210        6
42        210        1
41        210        7
40        210        1
39        210        4
38        210        2
37        210        9
36        210        6
35        210        9
34        210        13
33        210        15
32        210        23
31        210        45
30        210        33
这是在523的平方范围内找到素数间距为210的情况(211个自然数段出现素数个数及与其对应组数),比如最后一组表示出现30个素数的情况有33组,并不管它是否为同一k生素数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-9 20:29 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数表.DBF ALIAS 素表
SELECT 2
USE D:\VFP温习\L210二生素数表.DBF ALIAS 广孪中表
kssj=SECONDS()
For i=1 to 23874
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
      FOR j=1 TO 50
      SELECT  1
      GO jl+j
      PUBLIC B
      B=素数
      C=B-A
        IF C=210
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 二生210中 WITH A+105          &&将N值付给素数式
         exit
         else
        ENDIF
      endfor
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是一次性寻找一般二生素数L210(P,P+210)的中项程序。素数表中存放了523平方以内的素数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-10 21:20 | 显示全部楼层
clear
SELECT 1
USE D:\VFP温习\s3165万内素数.DBF ALIAS 素数表
kssj=SECONDS()
    SELECT  1     &&打开盛放素数式的表
    A=素数
    SKIP 45
    B=素数
    zx=B-A
    GO 2
    For i=1 to 1953474
      @ 5,12 say i
      jl=recno()
      PUBLIC D
      D=素数
      SKIP 45
      PUBLIC E
      E=素数
      F=E-D
      zx=MIN(F,zx)
      GO jl+1
    ENDFOR
    ?zx
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
在3165万内出现46个素数最短自然数段为209,即至少209个连续的自然数段才能出现46个素数,再短是不可能出现的。前后素数差为208.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-13 21:36 | 显示全部楼层
SELECT 1
USE D:\VFP温习\s3165万内素数.DBF ALIAS 素数表
SELECT 2
USE D:\VFP温习\L6三生素数24表.DBF ALIAS 广孪中表
kssj=SECONDS()
SELECT  1     &&打开盛放素数式的表
For i=1 to 1953520
      @ 5,12 say i
    SELECT  1     &&打开盛放素数式的表
    jl=recno()
    PUBLIC A
    A=素数
    skip
    PUBLIC B
    B=素数
    skip
    PUBLIC C
    C=素数
        IF B-A=2 AND C-B=4
         SELECT 2
         APPEND BLANK     &&增加一条空记录
         REPLACE 三生24中 WITH A+3   &&将N值付给素数式
         else
       ENDIF
      SELECT 1
      GO jl+1
   ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是从3165万内的素数表中查找一般三生素数L6(P,P+2,P+6)并把中项值填写在已有的表中程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 06:20 | 显示全部楼层
CLEAR ALL
SELECT 1
USE D:\vfp温习\L6三生素数24表.DBF ALIAS 三素表
SELECT 2
USE  D:\vfp温习\L6三生素数24合成结果表.DBF ALIAS 三生合成结果
    kssj=SECONDS()                      &&取出开始时间
   For N=10101 to 11000
    @ 3,6 say N
         FOR M=22 TO 34 step 6
          @ 4,8 say M
          X=M+N*30
          Y=X/2
                zhz=Y      &&求出偶数的中值
                SELECT  三素表             &&打开三素数表
                LOCATE FOR 三生24中>=zhz      &&根据三素表,查找最大三素数
                DO CASE
                CASE EOF()          &&如果超出三素数表最后一条记录
                        GO BOTTOM
                CASE 三生24中>zhz   &&如果找到三的素数中值大,就将记录指针退回一个,保证使用的最大三素数在中值内,小于等于即
                        SKIP -1
                       ENDCASE
                SSS=RECNO()+1   &&记录下最大三素数(中值内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
                LOCATE FOR 三生24中>=X     &&根据三素表,查找最大三素数
                DO CASE
                CASE EOF()          &&如果超出三素数表最后一条记录
                        GO BOTTOM
                CASE 三生24中>X   &&如果找到三的素数中值大,就将记录指针退回一个,保证使用的最大三素数在中值内,小于等于即
                        SKIP -1
                       ENDCASE
                SSSX=RECNO()+1   &&记录下最大三素数(中值内)记录位置(如果找到的素数等于开方根,则直接读取这个素数的位置)
                  GO 1           &&从第一条记录开始读取三素数
                  FOR J=1 TO SSS      &&内循环开始。这个循环实质上是从小到大顺序,依次读取素数。循环值是记录序号
                     I=J
                     Z=X-三生24中 &&以读取的三素数为条件,对X-三素数值进行判断,看一看是否在三生素数表内
                       go SSSX-3-J
                       count next INT((2*SSS-SSSX)*1.1)+10 for Z=三生24中 to js
                        IF js>0
                         EXIT         
                        ENDIF
                       GO I+1         &&素数表指针向下移动一个
                  ENDFOR
                   IF J>SSS
                   SELECT 三生合成结果             &&打开盛放素数的表
                   APPEND BLANK                    &&增加一条空记录
                   REPLACE 偶数 WITH X       &&将N值付给素数
                   ENDIF
       ENDFOR
     ENDFOR
   =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")   
    CLEAR ALL
这是查找不能被三生素数24的中项合成的偶数程序。以前有。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-14 10:22 | 显示全部楼层
上楼的参考值22不正确,它除了不合群的三生素数中项8能合成部分数外,几乎所有的这类数都不能被合成。
三生素数24的中项模2余数为0,两个合成只能合成能被2整除的数;模3余数为2,两个合成只能合成能被3整除余1的数;模5余数为0或4,余数合成只能合成能被5整除余为0的,3的,4的数;总和这三种情况;它的中项只能合成:30n+28,30n+34,30n+40(为了连续,以6为步长,方便编程和赋值)。所以,上楼的22不在排查之列,压根儿就没有解。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-26 11:32 , Processed in 0.062500 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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