foxbase默认按值传递参数
在程序最前面加一句SET UDFPARMS TO REFERENCE,可以按地址传递参数,程序应该就正常了

解决方案 »

  1.   

    你的程序我在VFP6下均通过。
    FOX低版本有CPU频率的限制,所以高性能的机器用FOX可能会有问题,你去找个降速的程序看看。(好象也有这方面的补丁)
      

  2.   

    两个程序分别是p1.prg 和p2.prg
    *p1.prg
    set proc to p1
    set talk off
    y=1
    input '请输入求某数的阶乘:' to n
    do fact with n,y
    ?str(n,2)+'!='+str(y,10)
    set talk on 
    procedure fact
    parameters n,y
    x=1
    do while x<=n
       y=y*x
       x=x+1
    enddo
    return*p2.prg
    set talk off
    input '请输入半径r(r<=0或r>9999时结束):' to r
    do while r>0 .and. r<=9999
       ?'圆的面积为:',area(r)
       wait '继续计算圆的面积吗(Y/N)?' to ans
       if upper(ans)="N"
          exit
       endif
       input '请输入半径r:' to r
    enddo
    return*area函数要单独放在一个文件中,名为area.prg
    parameters r
    s=pi()*r*r
    return s*或area函数和主程序同在一个文件中
    set proc to p2
    set talk off
    input '请输入半径r(r<=0或r>9999时结束):' to r
    do while r>0 .and. r<=9999
       ?'圆的面积为:',area(r)
       wait '继续计算圆的面积吗(Y/N)?' to ans
       if upper(ans)="N"
          exit
       endif
       input '请输入半径r:' to r
    enddo
    returnprocedure area
    parameters r
    s=pi()*r*r
    return s
      

  3.   

    这东西真头痛,我前不久还被人拉去考二级就考FORBASE,不会考,最后监考老师帮忙做了。
      

  4.   

    这两段程序我在VFP6下执行一点问题都没有啊?
      

  5.   

    1. 在foxbase 里面并没有PI()这个函数
    2. 在foxbase 里面自定义函数,也不用 function的
    3. 在foxbase 里面的自定义的函数必须有单独的文件名,或在一个过程文件里面,
       有程序名.
    请看ORACLE版我的修改
    http://www.csdn.net/expert/topic/1090/1090730.xml?temp=.9642145
      

  6.   

    set talk off
    y=1
    input '请输入求某数的阶乘:' to n
    do fact with n,y
    ?str(n,2)+'!='+str(y,10)
    set talk on 
    procedure fact
    parameters n,y
    x=1
    do while x<=n
       y=y*x
       x=x+1
    enddo
    return yset talk off
    input '请输入半径r(r<=0或r>9999时结束):' to r
    do while r>0 .and. r<=9999
       ?'圆的面积为:',area(r)
       wait '继续计算圆的面积吗(Y/N)?' to ans
       if upper(ans)="N"
          exit
       endif
       input '请输入半径r:' to r
       loop
    enddo
    return
    function area
    parameters r
    s=pi()*r*r
    return s