数学算式类库 说明书.docx
《数学算式类库 说明书.docx》由会员分享,可在线阅读,更多相关《数学算式类库 说明书.docx(20页珍藏版)》请在冰豆网上搜索。
![数学算式类库 说明书.docx](https://file1.bdocx.com/fileroot1/2023-2/3/2857b2be-366c-4586-9357-7f22df21bcc4/2857b2be-366c-4586-9357-7f22df21bcc41.gif)
数学算式类库说明书
数学算式类库
说明书
简介
作品名:
数学算式类库
作者:
AI编程集团点石成金
开发平台:
WinXP+VB2010
.NetFramework版本:
3.5
类型:
VB第三方控件/可视化控件/类库
描述:
计算包含+,-,*,/,\,%,|,^运算符的式子,式子中可以包含大中小括号,也可以包含如下函数:
Abs,Acos,Asin,Atan,Atan2,BigMul,Ceiling,Cos,Cosh,Div,Mod,Exp,Floor,Log,Max,Min,Pow,Round,Sign,Sin,Sinh,Sqrt,Tan,Tanh,Truncate;开发者也可以自己定义函数,包括中文函数名。
常量支持:
PI和E,开发者可以自己添加更多自定义常量
提醒:
本文最后附上一个实例,大家可以直接看这个实例。
在bin\Debug\目录下只包含AIPGroup.dll1.0的测试版,只会在屏幕上显示一行文字,并不影响用户工作,但如果换成商业版,就没有这行文字了,需要花1元钱购买商业版的用户请到AI编程集团官方博客圈子找灵光大师购买。
AIPGroup.dll1.0商业版的名称是:
AI编程集团1.0
功能详解
《数学算式类库》1.0版中包含的类“算式子”提供计算数学式子的功能。
支持2个常量、26个数学函数、8种数学运算。
比其它产品更高级的功能是:
允许添加新的常量、新的数学函数。
函数名、常量名不区分大小写,常量名会被转换成小写形式,在输入常量名列表时自动排列。
支持的常量列表如下:
常量名
值
PI
3.14159265358979
E
2.71828182845905
支持的运算符如下表所示:
运算符
对应的数学运算
运算优先级
函数、括号
数学函数
第1级
^
幂,例如:
2^3=8;3^2=9
第2级
|
分数,例如:
3|2=1.5
第3级
*
乘,例如:
2*3=6;3*3=9
第3级
/
除,例如:
8/2=3;3/2=1.5
第3级
\
整除,例如:
5\3=1;5\2=2
第3级
%
取余,例如:
5%3=2;5%2=1
第3级
-
减,例如:
5-3=2;5-1=4
第4级
+
加,例如:
5+3=8;5+1=6
第4级
注意:
式子中允许出现大、中、小括号,也允许出现空格;
分数被视为除法运算,但在显示的时候,格式上有所不同。
支持的函数如下表所示:
函数
释义
Abs(数字)
计算数字的绝对值
Acos(d)
计算余弦值为指定数字的角度
参数:
d:
一个表示余弦值的数字,其中-1≤d≤1。
计算值:
角度θ,以弧度为单位,满足0≤θ≤π
Asin(d)
计算正弦值为指定数字的角度
参数:
d:
一个表示正弦值的数字,其中-1≤d≤1。
计算值:
角度θ,以弧度为单位,满足-π/2≤θ≤π/2
Atan(d)
计算正切值为指定数字的角度。
参数:
d:
表示正切值的数字。
计算值:
角度θ,以弧度为单位,满足-π/2≤θ≤π/2。
Atan2(y,x)
计算正切值为两个指定数字的商的角度。
参数:
y:
点的y坐标。
x:
点的x坐标。
计算值:
角度θ,以弧度为单位,满足-π≤θ≤π,且tan(θ)=y/x,其中(x,y)是笛卡尔平面中的点。
请看下面:
如果(x,y)在第1象限,则0<θ<π/2。
如果(x,y)在第2象限,则π/2<θ≤π。
如果(x,y)在第3象限,则-π<θ<-π/2。
如果(x,y)在第4象限,则-π/2<θ<0。
如果点在象限的边界上,则计算值如下:
如果y为0并且x不为负值,则θ=0。
如果y为0并且x为负值,则θ=π。
如果y为正值并且x为0,则θ=π/2。
如果y负值并且x为0,则θ=-π/2。
BigMul(a,b)
生成两个32位数字的完整乘积。
参数:
a:
第一个乘数
b:
第二个乘数
Ceiling(d)
计算大于或等于指定的十进制数的最小整数。
参数:
d:
一个小数。
计算值:
大于或等于d的最小整数。
Cos(d)
计算指定角度的余弦值。
参数:
d:
以弧度计量的角度。
计算值:
d的余弦值。
Cosh(value)
计算指定角度的双曲余弦值。
参数:
value:
以弧度计量的角度。
Div(a,b)
整除,a是被除数,b是除数
例如:
Div(5,3)=1
Mod(a,b)
取余,a是被除数,b是除数
例如:
Mod(5,3)=2
Exp(d)
计算e的指定次幂。
参数:
d:
指定幂的数字。
Floor(d)
计算小于或等于指定小数的最大整数。
参数:
d:
一个小数。
计算值:
小于或等于d的最大整数。
Log(d)
计算指定数字的自然对数(底为e)。
参数:
d:
要查找其对数的数字。
Max(val1,val2)
计算两个数中较大的一个。
参数:
val1:
要比较的两个数中的第一个。
val2:
要比较的两个数中的第二个。
计算值:
val1或val2参数中较大的一个。
Min(val1,val2)
计算两个数中较小的一个。
参数:
val1:
要比较的两个数中的第一个。
val2:
要比较的两个数中的第二个。
计算值:
val1或val2参数中较小的一个。
Pow(x,y)
计算指定数字的指定次幂。
参数:
x:
要乘幂的双精度浮点数。
y:
指定幂的双精度浮点数。
计算值:
数字x的y次幂。
Round(a)
将双精度浮点值舍入为最接近的整数。
参数:
a:
要舍入的双精度浮点数。
计算值:
最接近a的整数。
如果a的小数部分正好处于两个整数中间,其中一个整数为偶数,另一个整数为奇数,则计算偶数。
Sign(value)
计算表示双精度浮点数字的符号的值。
参数:
value:
有符号的数字。
计算值:
表示value的符号的数字。
数字
说明
-1
value小于零
0
value等于零
1
value大于零
Sin(a)
计算指定角度的正弦值。
参数:
a:
以弧度计量的角度。
计算值:
a的正弦值
Sinh(value)
计算指定角度的双曲正弦值。
参数:
value:
以弧度计量的角度。
Sqrt(d)
计算指定数字的平方根。
参数:
d:
数字。
Tan(a)
计算指定角度的正切值。
参数:
a:
以弧度计量的角度。
Tanh(value)
计算指定角度的双曲正切值。
参数:
value:
以弧度计量的角度。
Truncate(d)
计算指定小数的整数部分。
参数:
d:
要截断的数字。
计算值:
d的整数部分(即舍弃小数位后剩余的数)。
实例
实例1:
把JHL=1982作为常量添加到其中
方法1:
在设计时,通过属性窗口,双击[常量]一行的右边,在弹出的窗口中,添加一行:
JHL=1982
方法2:
在运行时,通过“常量Value”的添加方法去添加;
实例2:
自定义一个函数名为“PJ”的函数,用于计算多个数的平均数
第1步:
在[函数名]属性中添加函数名“PJ”;
第2步:
在“计算自定义函数”事件中编写响应“PJ”的代码,例如:
PrivateSubForm1_Load(……)HandlesMyBase.Load
算式子1.函数名Value.Add("PJ")
EndSub
PrivateSub算式子1_计算自定义函数(……ByVal函数名AsSystem.String,
ByVal参数()AsSystem.Double,ByRefresultAsSystem.Double)Handles算式子1.计算自定义函数
If函数名.ToUpper="PJ"Then
DimrAsDouble=Double.NaN
ForEachiAsDoubleIn参数
IfDouble.IsNaN(r)Then
r=i
Else
r=r+i
EndIf
Next
r=r/参数.Count
result=r
EndIf
EndSub
实例3:
把计算式子的过程灵活地显示出来
这就需要用到“每一步”事件,这个事件在‘每计算完一步’后就被触发,可以按照下面的格式去写:
PrivateSub算式子1_每一步(……ByVal式子AsSystem.String)Handles算式子1.每一步
'把每一步都显示到TextBox3
TextBox3.AppendText(式子&vbCrLf)
'刚被计算出来的值用和括起来
'下一步要计算的部分用和括起来
EndSub
为了讲清楚这个VB第三方类库的用法,我编写实例程序:
金海龙算式子.zip,
欢迎通过我的博客上的链接免费下载。
这个程序的界面如下:
Form1中从上到下依次是三个TextBox,第三个TextBox是个多行文本框,用于保存每一步的计算结果,都是HTML格式。
把TextBox3中的代码做成一张网页,代码如下:
1+2-8/2^2*{10-[Pow(2,3)]}1+2-8/2^2*{10-[Pow(2,3)]}
1+2-8/2^2*{10-[Pow(2,3)]}
1+2-8/2^2*{10-[8]}
1+2-8/2^2*{10-8}
1+2-8/2^2*{2}
1+2-8/2^2*2
1+2-8/4*2
1+2-2*2
1+2-4
3-4
-1
用IE8打开后,就是下面的样子:
粗体的部分是“即将要被计算的”;
斜体的部分是“已经被计算出来的值”。
只要稍微改一改其Style或者CSS,就可以做出格式更好的教学题课件。
相关代码如下:
Form1.vb:
Imports数学算式类库
PublicClassForm1
'一、单击Button1开始计算TextBox1中的式子,计算完毕后把结果保存到TextBox2,并且把每一步都显示到TextBox3
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
'单击Button1开始计算TextBox1中的式子
Me.TextBox3.Clear()
Me.算式子1.式子=Me.TextBox1.Text
Me.算式子1.计算()
TextBox2.Text=算式子1.结果Value'如果不写这一行的话,可以仿照下面的Sub
EndSub
'PrivateSub算式子1_结果Changed(ByValsenderAsSystem.Object)Handles算式子1.结果Changed
'计算完毕后把结果保存到TextBox2
'TextBox2.Text=算式子1.结果Value
'EndSub
PrivateSub算式子1_每一步(ByValsenderAsSystem.Object,ByVal式子AsSystem.String)Handles算式子1.每一步
'把每一步都显示到TextBox3
TextBox3.AppendText(式子&vbCrLf)
'刚被计算出来的值用和括起来
'下一步要计算的部分用和括起来
EndSub
'***********************************************************************************
'二、增加一个用于计算平均数的函数:
PJ(数字1,数字2,数字3,……)
PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
算式子1.函数名Value.Add("PJ")
EndSub
PrivateSub算式子1_计算自定义函数(ByValsenderAsSystem.Object,ByVal函数名AsSystem.String,ByVal参数()AsSystem.Double,ByRefresultAsSystem.Double)Handles算式子1.计算自定义函数
If函数名.ToUpper="PJ"Then
DimrAsDouble=Double.NaN
ForEachiAsDoubleIn参数
IfDouble.IsNaN(r)Then
r=i
Else
r=r+i
EndIf
Next
r=r/参数.Count
result=r
EndIf
EndSub
EndClass
Form1.Designer.vb:
Imports数学算式类库
_
PartialClassForm1
InheritsSystem.Windows.Forms.Form
'Formoverridesdisposetocleanupthecomponentlist.
_
ProtectedOverridesSubDispose(ByValdisposingAsBoolean)
Try
IfdisposingAndAlsocomponentsIsNotNothingThen
components.Dispose()
EndIf
Finally
MyBase.Dispose(disposing)
EndTry
EndSub
'RequiredbytheWindowsFormDesigner
PrivatecomponentsAsSystem.ComponentModel.IContainer
'NOTE:
ThefollowingprocedureisrequiredbytheWindowsFormDesigner
'ItcanbemodifiedusingtheWindowsFormDesigner.
'Donotmodifyitusingthecodeeditor.
_
PrivateSubInitializeComponent()
Mponents=NewSystem.ComponentModel.Container()
Me.Button1=NewSystem.Windows.Forms.Button()
Me.Label1=NewSystem.Windows.Forms.Label()
Me.TextBox1=NewSystem.Windows.Forms.TextBox()
Me.TextBox2=NewSystem.Windows.Forms.TextBox()
Me.Label2=NewSystem.Windows.Forms.Label()
Me.算式子1=New数学算式类库.算式子(Mponents)
Me.TextBox3=NewSystem.Windows.Forms.TextBox()
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Anchor=CType((System.Windows.Forms.AnchorStyles.TopOrSystem.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
Me.Button1.Location=NewSystem.Drawing.Point(363,9)
Me.Button1.Name="Button1"
Me.Button1.Size=NewSystem.Drawing.Size(74,24)
Me.Button1.TabIndex=0
Me.Button1.Text="计算(&C)"
Me.Button1.UseVisualStyleBackColor=True
'
'Label1
'
Me.Label1.AutoSize=True
Me.Label1.Location=NewSystem.Drawing.Point(12,9)
Me.Label1.Name="Label1"
Me.Label1.Size=NewSystem.Drawing.Size(41,12)
Me.Label1.TabIndex=1
Me.Label1.Text="式子:
"
'
'TextBox1
'
Me.TextBox1.Anchor=CType((((System.Windows.Forms.AnchorStyles.TopOrSystem.Windows.Forms.AnchorStyles.Bottom)_
OrSystem.Windows.Forms.AnchorStyles.Left)_
OrSystem.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
Me.TextBox1.Location=NewSystem.Drawing.Point(59,9)
Me.TextBox1.Name="TextBox1"
Me.TextBox1.Size=NewSystem.Drawing.Size(292,21)
Me.TextBox1.TabIndex=2
Me.TextBox1.Text="abs(-1)+2*(1+2)"
'
'TextBox2
'
Me.TextBox2.Anchor=CType((((System.Windows.Forms.AnchorStyles.TopOrSystem.Windows.Forms.AnchorStyles.Bottom)_
OrSystem.Windows.Forms.AnchorStyles.Left)_
OrSystem.Windows.Forms.AnchorStyles.Right),System.Windows.Forms.AnchorStyles)
Me.TextBox2.Location=NewSystem.Drawing.Point(59,36)
Me.TextBox2.Name="TextBox2"
Me.TextBox2.Size=NewSystem.Drawing.Size(292,21)
Me.TextBox2.TabIndex=4
'
'Label2
'
Me.Label2.AutoSize=True
Me.Label2.Location=NewSystem.Drawing.Point(12,36)
Me.Label2.Name="Label2"
Me.Label2.Size=NewSystem.Drawing.Size(41,12)
Me.Label2.TabIndex=3
Me.Label2.Text="结果:
"
'
'算式子1
'
Me.算式子1.函数名=NewString(){"Abs","Acos","Asin","Atan","Atan2","BigMul","Ceiling","Cos","Cosh","Div","Mod","Exp","Floor","Log10","Log","Max","Min","Pow","Round","Sign","Sin","Sinh","Sqrt","Tan","Tanh","Truncate"}
Me.算式子1.常量=NewString(){"e=2.71828182845905","pi=3.14159265358979"}
Me.算式子1.式子=""
Me.算式子1.是否计算=False
Me.算式子1.显示每一步=True
Me.算式子1.结果=""
'
'TextBox3
'
Me.TextBox3.Location=NewSystem.Drawing.Point(59,64)
Me.TextBox3.Multiline=True
Me.TextBox3.Name="TextBox3"
Me.TextBox3.Size=NewSystem.Drawing.Size(292,93)
Me.TextBox3.TabIndex=5
Me.TextBox3.WordWrap=False
'
'Form1
'
Me.AutoScaleDimensions=NewSystem.Drawing.SizeF(6.0!
12.0!
)
Me.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize=NewSystem.Drawing.Size(444,159)
Me.Controls.Add(Me.TextBox3)
Me.Controls.Add(Me.Button1)