欢迎访问 Forcal数学软件
演示程序及源代码
目 录
1 测试程序:ForcalTest 2 演示程序:工程1 3 演示程序:Project1 |
说明:所有演示程序都很简单,没有使用FORCAL的模块化编译功能。FORCAL的模块化编译功能由MForcal或OpenFc(可从天空软件站、华军软件园等多家下载站下载到这两个程序)演示。
测试程序ForcalTest 【页首】
一、源代码:
文件夹ForcalTest中的源程序ForcalTest.cpp和头文件forcal32.h。
该程序由VS C++ 2008编译通过。注意要将活动解决方案配置为“Release”,项目属性中的字符集设置为“未设置”。本软件包中由VS C++ 2008编译的项目均需这样设置。
通过源代码,可以了解如何在程序中加载使用Forcal32.dll,如何使用Forcal编译字符串表达式,如何向Forcal注册自定义的各种函数等等。
1、add(2,3):计算两个数的和。
2、pi():常量函数,圆周率pi。
3、SIntegrate(…):一元辛卜生积分函数,用法与FORCAL内置的二级函数SimpIntegrate(…)完全相同。
4、average(x1,x2,x3,… …):计算多个数的平均值。
该函数至少需要一个参数,否则返回一个FORCAL运行错误,代码为1。
5、speed():比较FORCAL和VC的计算速度。
6、print(2.3):输出一个实数。
7、PrintStr(“hello !”):输出一个近程静态Forcal字符串。
PrintStr(pFor,”hello !”):输出一个远程静态Forcal字符串,其中pFor为表达式句柄,可由函数HFor(“ForName”,ForType)获得。
8、end():输出一个换行符。
9、clock():获取流逝过去的时钟脉冲数。
10、CalFor(“f”,x1,x2,…,xn):在运行时调用实数表达式”f”;x1,x2,…,xn为表达式的参数。
该函数会返回FORCAL运行错误,错误代码意义: 1:至少需要一个参数;2:参数不匹配;3:找不到表达式。
11、CalHFor(pFor,x1,x2,…,xn):在运行时调用实数表达式pFor;x1,x2,…,xn为表达式的参数。其中pFor为表达式句柄,可由函数HFor(“ForName”,ForType)获得。
该函数会返回FORCAL运行错误,错误代码意义: 1:至少需要一个参数;2:参数不匹配;3:非法的表达式句柄。
另外,forcaltest中定义了两个常量:_e_和Pi。
四、计算实例:
1、FORCAL与VC的速度比较:使用自定义二级函数speed[]即可进行比较。
2、简单的数值计算
2+sin[2+3*sqrt(3)]*exp[5]; //实数表达式;
i:222%5+8; //整数表达式;
c:sin[2+3i]-ln[i]; //复数表达式;
3、三角形面积公式
F(a,b,c:s)= s=(a+b+c)/2,sqrt[s*(s-a)*(s-b)*(s-c)]; //定义三角形面积公式;
F[3,4,5];
4、变步长辛卜生一元积分
f(x)=sin[x]+0.8; //定义一元函数;
SIntegrate(1,2,0.0001,”f”);
5、求和函数sum
F3(x,y)=cos{1-sin[1.2*[x+0.1]^(y/2-x)+cos{1-sin[1.2*[x+0.2]^(y/3-x)]}]
-cos{1-sin[1.2*[x+0.3]^(y/4-x)]}-cos{1-sin[1.2*[x+0.4]^(y/5-x)
+cos{1-sin[1.2*[x+0.5]^(y/6-x)]}]-cos{1-sin[1.2*[x+0.6]^(y/7-x)]}}};
sum[“F3”,0,1,0.011,1,2,0.11]; /span>
6、循环的嵌套:打印字符串
(:i,j)=
{
i=20,
while
{
i,
PrintStr[“aa “],
j=0,
while
{
i-j,
PrintStr[“*”],
j++
},
PrintStr[” bb”],
end[],
i–
}
} /span>
7、循环的嵌套:将1~10这几个数字在屏幕上打印10遍
(:i,j)=
{
i=0,
while
{
i<10, //循环判断语句;
j=1,
while
{
j<11, //循环判断语句;
print(j),
j++
},
end(),
i++
}
}
8、检测一个数是否为素数
Prime(n:i)=
{
i=1,
while
{
i<n/2,
if
{
!fmod(n,++i), //i先增1,然后进行模运算;
print[n],PrintStr[“不是一个素数!”],end[],
return[i]
}
},
print[n],PrintStr[“是一个素数!”],end[],
i
};
Prime[5]; //检测5是否是一个素数;
9、递归打印数据
SetRealStackMax[1000];
z_a(i)=if[i<10,z_a(i+1),print(i)]; //按降序打印;
z_a[0];
a_z(i)=if[i<10,print(i),a_z(i+1)]; //按升序打印;
a_z[0];
10、无限循环的退出
while[1,1]; //无限循环函数,可通过另一线程“退出FORCAL!!!”;
11、使用常量和常量函数
_e_; Pi; pi[];
12、输出远程静态Forcal字符串:例子1
aa()=PrintStr(HFor(“aa”,2),”hello !”);
13、输出远程静态Forcal字符串:例子2
bb()=”adfg”;
PrintStr[HFor(“bb”,2),bb()];
14、CalFor(…)的用法:在运行时调用实数表达式
aa(x)=x+8;
CalFor[“aa”,7];
15、CalHFor(…)的用法:在运行时调用实数表达式
aa(x)=x+8;
CalHFor[HFor(“aa”,2),7];
五、由章毅明(hias_asia)先生提供的例子(可通过hias_asia@126.com与章毅明先生联系)
1、Cantor表搜索算法的Forcal实现
Cantor表
Georg Cantor证明了有理数是可列的。他用下面这一张表来证明该命题:
1/1 |
1/2 |
1/3 |
1/4 |
1/5 |
… |
2/1 |
2/2 |
2/3 |
2/4 |
… |
|
3/1 |
3/2 |
3/3 |
… |
|
|
4/1 |
4/2 |
… |
|
|
|
5/1 |
… |
|
|
|
|
… |
|
|
|
|
|
我们为上表中的每一项编 :第1项是1/1,然后是1/2,2/1,3/1,2/2,……你的任务是求表中第N项的值。
要求从键盘读入若干个正整数,对于每一个数n(1<=n<=100000),输出Cantor表中相应的数(以表中实际的分数形式输出,不要约分)。输入0表示结束。样例如下:
样例输入
1
3
8
14
0
样例输出
1/1
2/1
2/3
2/4
#include <iostream>
using namespace std;
int main()
{
int n;
while (cin >> n) // 读入n
{
if (n == 0) // n为0时退出
break;
int sum = 0; // 所经过的数的数目
int i = 0; // 第n个数在第i斜线上
while (sum < n) // 直到经过的数不少于n
{
i++; // 下一条斜线
sum += i;
}
if (i % 2 == 1) // i是奇数
cout << sum – n + 1 << ‘/’ << n – sum + i << endl;
else // i是偶数
cout << n – sum + i << ‘/’ << sum – n + 1 << endl;
}
return 0;
}
Forcal源代码:
2、移动内存算法的Forcal实现
对于有k个元素的数组int a[k]={…};写一个不另外申请数组空间,但可以申请少许变量的高效算法将数组内容循环左移m位。
比如:int a[6]={1,2,3,4,5,6},循环左移3位得到结果{4,5,6,1,2,3}。
i:OutPoint(x,n:i,str)= str=new(char_s,80),i=0,while{i<n,FCDToStr[int,get(x,i),str],OutStr[str],OutNStr[” “],i++},delete[str];
i:HCF(x,y:a,r,b)= //求最大公因数
{
a=x,b=y,r=a%b,
while(r>0,a=b,b=r,r=a%b),
return(b)
};i:Carry(:i,start,p,hloc,step,pv,tmp,point:m,len,b)= //数组的区间移动
{
start=0,p=0,i=0,len=6,m=3,
point=new(int_s,6,EndType,1,2,3,4,5,6),
hloc=HCF(len,m),
step=len-m,
while{ i<hloc,
p=i,start=p,get(point,p,&pv),
until{
p=(step+p)%len,
tmp=pv,get(point,p,&pv),set(point,p,tmp),
p==start
},
i++
},
OutPoint(point,6),
delete[point]
};
3、插入排序法
4、删除指定数据
六、演示FcData中的例子
所有例子均可不加修改地在ForcalTest中运行,例子请参考fcdata.htm。
演示程序:工程1 【页首】
一、源代码:
在文件夹fc_vb中。该程序由VB6.0编译通过。
二、使用说明:
1、该程序需要“Forcal32.dll”和“QuitFc32.dll”两个动态库的支持。“QuitFc32.dll”是一个Forcal运行监视动态库,在任意可接受输入的窗口,按 Ctrl+Alt+Q(q) 键可以退出Forcal漫长的计算过程或者无限循环。
2、该程序使用简单,其他请参考程序运行时的说明。
演示程序:Project1 【页首】
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!