数学中国

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

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

  [复制链接]
 楼主| 发表于 2019-2-26 13:03 | 显示全部楼层
在excel中的逻辑函数与vfp中的逻辑函数不同,在excel中无论and还是or都是把条件放在括号内,用逗号隔开,无论多少个条件;而在vfp中,在每个条件之间都要放and或or,不能仅用一个。
or的条件中只要有一个为真,就是真true,只有全部为假时才为假false;与此相反的是and,只有全部为真时,才是真ture,否则为假(包括全假或至少一个为假)。
 楼主| 发表于 2019-2-26 16:40 | 显示全部楼层
在用vfp程序求1到99的倒数和时,语句endfor与next雷同。
clear
s=0
  for i=1 to 99
  s=s+1/i
  next
  ?S
  RETURN
这里用的next,下边用的endfor
clear
s=0
  for i=1 to 99
  s=s+1/i
  endfor
  ?S
  RETURN
  
 楼主| 发表于 2019-2-27 11:47 | 显示全部楼层
下边是我编程求的s=3!+5!+7!+......+N!,当s>=680000时,求N
CLEAR
N=1
DO WHILE .T.
N=N+2
J=1
S=0
FOR I=1 TO N
J=J*I
ENDFOR
S=S+J
IF S>=680000
EXIT
ENDIF
ENDDO
?N
RETURN
而参考答案为:
CLEAR
S=0
N=3
DO WHILE .T.
t=1
m=1
DO WHILE m<n
t=t*m
m=m+1
ENDDO
S=S+t
IF S>=680000
  EXIT
  ENDIF
  N=N+2
  ENDDO
  ?N
  RETURN
它这里用了两个do while语句,我的仅用了一个do while语句,我用了for to语句。
 楼主| 发表于 2019-2-27 12:14 | 显示全部楼层
CLEAR
S=0
N=0
DO WHILE .T.
N=N+1
J=1
FOR I=1 TO N
J=J*I
ENDFOR
S=S+J
IF S>=61000
EXIT
ENDIF
ENDDO
?"自然数:",N, "阶乘和:",S
RETURN
这是与上楼差不多一致的编程(求连续自然数的阶乘和不超61000,应该是到>=61000时结束)
 楼主| 发表于 2019-2-27 15:27 | 显示全部楼层
在前n项和中能被17或35整除的数有多少个。
CLEAR
N=0
FOR X=20 TO 80
    S=0
    FOR I=1 TO X
      S=S+I
    NEXT
IF S%17=0 OR S%35=0
N=N+1
ENDIF
NEXT
?N
RETURN
vfp编程
下面是excel中的公式IF(OR(MOD(BE21,17)=0,MOD(BE21,35)=0),1,0)
 楼主| 发表于 2019-2-27 17:03 | 显示全部楼层
CLEAR
dime a(15)
a(1)=1
a(2)=2
a(3)=3
FOR I=4 TO 15
a(I)=a(I-1)+a(I-2)+a(I-3)
NEXT
?a(15)
RETURN
这是求数列第15项的值,开始没有用dime a(15)做声明,所以提示找不到变量,后来才知必须用数组变量。下面是从网上查到的信息:
定义数组命令:declare或者dimension命令。
1.dimension命令
dimension ar (10) :
定义一个一维数组ar,该数组有10个元素,数组下标从1开始。
dimension ab[3,2] :
定义一个二维数组ab,该数组有6个元素。
2.declare命令
declare a(3,4):

定义一个二维数组a,该数组有12个元素。
 楼主| 发表于 2019-2-27 17:43 | 显示全部楼层
CLEAR
N=0
FOR X=200 TO 800
    FLAG=.T.
    FOR I=2 TO SQRT(X)
      IF X%I=0
        FLAG=.F.
        EXIT
     ENDIF
  NEXT
    IF FLAG=.T.
    N=N+1
    ENDIF
  NEXT
  ?N
  RETURN
这是求的200至800间的素数个数
 楼主| 发表于 2019-2-27 18:02 | 显示全部楼层
CLEAR
S=0
FOR X=600 TO 900
  FOR I=2 TO SQRT(X)
    IF X%I=0
    EXIT
    ENDIF
  NEXT
  IF I>SQRT(X)
   S=S+X
   ENDIF
NEXT
?S
RETURN
这是编程求的600到900的素数和,比起上楼我觉得更好理解。
 楼主| 发表于 2019-2-28 12:38 | 显示全部楼层
搜索-----vfp程序设计题(附参考答案),即可找到试题及答案(豆丁网)
 楼主| 发表于 2019-2-28 14:24 | 显示全部楼层
clear
N=0
FOR WUY=0 TO 3
   FOR ERY=0 TO 9
      FOR YIY=0 TO 10-WUY-ERY
        IF 5*WUY+2*ERY+YIY=18
        N=N+1
        ?WUY,ERY,YIY
        ENDIF
     NEXT
   NEXT
NEXT
    ?N
  RETURN
这是求18元分成1元,2元,5元有多少种分法,总纸币张数为10,运行结果为12,实际是3组,显示过程知道,所求的是和为18,张数之和不是10张,即小于等于10.
在条件后加上 and WUY+ERY+YIY=10
运行结果正常。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-13 09:35 , Processed in 0.121311 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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