数学中国

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

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

  [复制链接]
 楼主| 发表于 2020-9-26 20:36 | 显示全部楼层
也是时候对vfp编程发起新一轮的攻击了,否则一切有关知识都得废了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-1 19:04 | 显示全部楼层
SELECT 1
USE F:\素数式\素数.DBF ALIAS 素数表
SELECT 2
USE F:\素数式\奇数.DBF ALIAS 奇数表
SELECT 3
USE F:\素数式\素数式表.DBF ALIAS 素数式
kssj=SECONDS()
    For N=1 to 500001
    @ 5,12 say N
     SELECT 2
     go N
     Public js
     js=奇数
        SELECT 1
        go 1
        for m=1 to 45
        SELECT 1
        Public ss
        ss=素数
        bpz=mod(js,ss)
        if bpz=0
           EXIT
         ENDIF
         SELECT 1
         skip
          C=RECNO()
         ENDFOR
        IF C>45
                SELECT  3      &&打开盛放素数式的表
                APPEND BLANK     &&增加一条空记录
                REPLACE 素数式千 WITH js           &&将N值付给素数
        ENDIF
    endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是个有错误的程序,没有完成任务,结果不对。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 16:17 | 显示全部楼层
VFP中的循环语句。do while  循环说明 部分  《条件表达式》 (条件表达式为真需反复执行的语句(即循环体)系列)ENDDO循环结束部分。功能,当条件表达式的值为真时,需反复执行循环体,直到条件表达式为假时为止。例如前100个自然数的和。分析:开始给变量赋值,进入循环体,初始值S=0,i=1,I=<100?,条件为真,S=S+I,I=I+1(一定放在后边,先求和,后增加1),条件为假,输出求和结果,结束循环。
clear
S=0
I=1
do while  I=<100
S=S+I
I=I+1
enddo
?" 1-100的和为:S“‘,S
return
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 16:31 | 显示全部楼层
clear
S=0
I=1
do while  I=<100
S=S+I
I=I+1
enddo
?"1-100的和为:S",S
return
试运行,结果正确。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 17:32 | 显示全部楼层
在显示器上逐行显示1至15这15个数字
clear
I=1
do while  I<=100
?I
I=I+1
enddo
return
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 17:37 | 显示全部楼层
clear
I=1
do while  I=<15
?I
I=I+1
enddo
return
运行成功
(上楼是15非100,忘了改了)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-2 18:10 | 显示全部楼层
从键盘上输入10个,求这10个数的和。
clear
S=0
K=1
do while K<=10
INPUT '请输入一个数' to A
S=S+A
K=K+1
ENDDO
?S
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-3 21:10 | 显示全部楼层
今天来到太仆寺旗。成功登陆电脑。也下载了vfp编程。很快有新的看点和精彩内容。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-3 22:14 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数式表.DBF ALIAS 素式表
kssj=SECONDS()
    S=60001
    For i=1 to 10000
     PUBLIC N
      N=i
      @ 5,12 say N
       IF MOD(N,2)=0
       S=S+2
       ELSE
       S=S+4
       endif
       SELECT  1     &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素数式 WITH S          &&将N值付给素数
    endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是向一个工作表添加数据的一个程序,奇数累加4,偶数累加2(在上一个累加和的基础上加2或加4,奇数加4,偶数加2).
从运行结果看正确。S起始值改为素数式表尾数值即可,每步要完成就看看官本人了,你想算多少,就输进多少,即对循环值加以限制。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-4 06:56 | 显示全部楼层
SELECT 1
USE D:\VFP温习\素数式至13表.DBF ALIAS 素式表
kssj=SECONDS()
    S=1
    For i=1 to 10009
     PUBLIC N
      N=i
      @ 5,12 say N
       IF MOD(N,2)=0 &&判断循环值是否被2整除
       S=S+2  &&符合条件执行的方案
       ELSE
       S=S+4 &&不符合条件执行的方案
       ENDIF
       IF MOD(S,5)=0 OR  MOD(S,7)=0 OR MOD(S,11)=0 OR  MOD(S,13)=0 && 如果S被其中素数之一整除就跳过,什么也不做
       ELSE  &&否则执行第二步方案
       SELECT  1     &&打开盛放素数式的表
       APPEND BLANK     &&增加一条空记录
       REPLACE 素数式 WITH S          &&将N值付给素数式
       endif
    endfor
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是直接从素数式至3到素数式至13的程序,运行结果正确,需要把1插入到第一条记录之前。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 01:29 , Processed in 0.109375 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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