小飞计算器(小飞可编程复数计算器)用户手册

Posted 小飞_Xiaofei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小飞计算器(小飞可编程复数计算器)用户手册相关的知识,希望对你有一定的参考价值。

版权所有。所有权利保留。

欢迎转载,转载时请注明出处:

http://blog.csdn.net/xiaofei_it/article/details/18676049

本软件特色

·可编程,程序员可以在本软件中写程序。

·支持复数和复函数,所有函数均可以在复数模式下计算。

·支持多进制实数,通常计算器只支持多进制整数,本软件还支持多进制小数。

·高精度,支持任意小数转为分数。

·有任意多的存储器可供存储数据。


更多特色请看

http://blog.csdn.net/xiaofei_it/article/details/18675175



如果您发现本软件的漏洞、错误或对本软件有任何建议、意见,请联系小飞。


1、基本功能

打开计算器,用户看到的界面称作计算界面。



计算界面第一行的方框是输入框,第二行的方框是输出框,第三行的方框是模式框,最底下的方框是提示框。

请按在纸上的相同格式输入结果,输入的数值表达式将显示在输入框中。

之后按=,便开始进行计算。计算完成后结果将显示在输出框中。



如果想终止运算,按终止。

模式框显示当前模式,通过设置可以改变模式。

点击“设置”可以改变实数复数模式、角度弧度模式、显示方式。关于显示方式请参见下文的“结果显示”。

提示框显示提示信息。

在数值表达式中,运算符优先级和日常的没区别。

另外乘号写作“*”,除号写作“/”,圆周率写作“pi”。

2、数值表达式

数值表达式出现在很多地方,输入框中的表达式就应该是一个合法的数值表达式。在自定义函数中,数值表达式尤为重要。

数值表达式和日常计算的表达式几乎一样,优先级也几乎一样:乘方最高,乘除其次,加减最低。

另外,a^b表示a的b次方。注意乘方号的结合性,2^3^4是2^(3*4),而不是(2^3)^4。

在使用自然对数的底e时要注意,科学计数法里已经使用了e作为指数标志,所以诸如e^x应该使用exp(x)。

不论调用内置函数还是自定义函数,必须加上括号,比如sin 8应该写作sin(8)。

pi返回圆周率。ans返回上次的计算结果,复数模式下,ans只保留结果的实数部分。

一个合法表达式的例子是3*7^4*ans+pi+load(x)。

2.1 合法的数

·实数输入

实数可以有正负号,也可以加上指数,指数不能超过1000,不能小于-1000。一个实数不管有没有指数部分,都不能有空格。

如果要进行多进制输入,则应加上前缀。多进制输入时,可以输入小数,但不能输入类似科学计数法的指数。前缀以数字0开头,后接一个字母(b或B表示二进制,小写字母o或大写字母O表示八进制,d或D表示十进制,h或H表示十六进制)。十六进制大于9的部分由大小写字母abcdef或ABCDEF构成。

以下是几个例子:

89.756e+900
-89.68E89
32999.7864e-87
0Hadf78.8907
0b110.00011

·复数输入

复数的实数部分和实数输入相同,虚数部分在虚数后加上i即可。

比如3-7i、-8+9i,如果想单独输入虚数单位i(比如2+i),那么应该输入1i(2+i应该输入2+1i),因为计算器不把i看成数字,而把它看成一个标识符。

3、结果显示


根据用户的设置,计算结果会以相应的方式显示在输出框中。 如果是“正常显示”,则会根据用户设定的进制显示结果。当数过大或过小时,自动改为科学计数法。 如果是“小数显示”,则会根据用户设定的进制显示结果。用户可以按“+”或“-”改变保留的小数位数。 如果是“科学计数法”,则会按科学计数法显示结果。用户可以按“+”或“-”改变有效数字位数。科学计数法始终是十进制显示的。 用户还可以在计算界面点击“分数显示”,把结果显示为带分数或假分数。当结果是有限小数或无限循环小数时,会显示为精确结果;当结果是无限非循环小数时,会显示为尽可能精确的近似结果。 注意:结果一律以合法的数值表达式显示(便于把结果复制后再进行运算),所以某些时候结果看起来有些奇怪。比如: 632i+36”在“科学计数法3位有效数字”的模式下结果显示为“3.60e1+6.32e2*1i”;“6/36i+36/9852-69/7-6i”的结果显示为带分数是“-(9+4905/5747)-(6+1/6)*1i”,仔细看就是两个带分数。这个结果在某些计算器上显示时,已经填满了输出框,这时请左右移动输出框,便可看到结果的所有部分。当结果填满输出框时,请务必左右移动输出框,看是否有一部分被隐藏了。

4、保存结果

计算结束后,可以保存结果。点击“保存结果”,选择要存入的存储器即可。也可以新建存储器进行保存。
第一次使用时,还没有存储器,必须新建存储器进行保存。
存储器ans保存上次的计算结果,不应人为把结果存入ans中。

5、存储器

存储器存储一些数值供用户以后使用。用户点击计算界面的“存储器”后,可以新建存储器并且存储一些数值,也可以更改现有的存储器中的数值。
在自定义函数中,用户可以使用store语句把相应的值存入存储器。
在表达式中,用户可以使用load(存储器名)使用存储器中的数值。比如load(sum)+5。另外load(ans)和ans是同一个意思。
存储器名应是一个合法的标识符。
注意:在复数模式下,存储器只存储数值的实数部分。
所有数值用十进制表示时,均有50位精度,在显示时显示30位。用户可以在ans存储器中查看所有的50位。

6、标识符

合法的标识符是一个字母开头,后跟字母或数字的字符串,中间不能有符号,也不能有空格。如About、sumOf2Num均为合法的标识符。
存储器名、函数名、自定义函数中的变量名都应是合法的标识符。
用户自定义的标识符不应是内置函数名、load、ans、pi以及保留字。
保留字有:function、var、if、else、for、to、step、while、break、continue、store、return等。

7、内置函数


表达式中可以调用内置函数,但是千万记住加上括号。如sin(8)、cos(8-7*9)。
点击“函数”,再点击需要调用的函数,相应的函数就出现在计算界面输入框的光标处,但后面的括号要自己补齐。某些函数有多个参数,多个参数中用逗号隔开。如root(34,5)。
输入内置函数时,计算界面的提示框会显示提示信息。
每个内置函数都可以在实数和复数两种模式下运行。在复数模式下,函数返回的值和实数模式不同,这一点要注意。比如sqrt(-1)结果是1i,而实数模式下会报错。
通常复函数都是多值的,结果的表达式中会有k,k取不同值时就得到多个结果。
本软件取k为0。 (软件内置文档在此处有误,以本文为主。)
复数模式下的函数是供高等院校师生和专业人员使用,普通用户几乎不需要在复数模式下使用内置函数。所以普通用户请尽量使用实数模式下的函数。


8、自定义函数


调用自定义函数时,点击“自定义函数”,再选择自定义函数,按“插入”,便会插入计算界面表达式的光标处,同时提示框内会显示您编写自定义函数时输入的描述信息。
要编写自定义函数,点击计算界面中的“自定义函数”,再点击“新建”,输入函数名和函数描述(调用自定义函数时,计算界面中的提示框中会显示函数描述,所以建议您认真填写),然后就进入函数编辑页面。
编辑函数时,函数头的函数名(具体见下文)应该与之前输入的函数名保持一致。
编辑框中只能输入一个函数(局部函数是不被支持的),如果要创建其他函数,请另外新建函数。
如果编辑框中输入了多个函数,本软件只处理第一个函数,第一个函数后的所有内容将被忽略。


计算器只存入localFun,而忽略后面的函数。
本软件不支持局部函数,此例中,用户只能把localFun作为一个新函数进行定义。

编辑函数后,点击检查,会显示编译信息。有错误时,提示信息会显示在下方,同时光标会显示在出错处的附近。
当确认没有错误后,便可以使用此函数了。
本计算器不支持函数重载,所以当您已经编写了函数max(a,b)后,就不能再编写max(a,b,c)了。

9、编写函数代码

一个函数由函数头、变量定义、函数体三部分组成,其中变量定义部分可以省略。
函数支持递归调用,并且可以在计算过程中把数据存储在存储器中,也可以从存储器中读取数据。
写代码时,一切符号请使用英文标点,注释中的除外;一切字母和数字请使用英文字母和半角数字,注释中的除外。
考虑到某些手机输入法可能使用不方便,编辑代码时,编辑器中给出了许多标点和语句的快捷输入键。
您可以使用空格和tab制表符进行缩进。
一个典型的函数如下:



在使用计算器时,可以像使用内置函数那样使用自定义函数。



您打开fib函数,按“插入”,便可以把该函数插入输入框的光标位置(和内置函数操作一样)。


在计算界面输入fib(6)+fib(3)+1,按等号,便得到17。


但如果计算fib(0)将死循环,请终止。


9.1 类型

当实数模式时,所有数据、变量、函数返回值都是实数类型;当复数模式时,所有数据、变量、函数返回值都是复数类型。所以编程时无需定义类型,由具体执行环境决定。
如果函数只能在复数模式中运行,那么在实数模式中运行会报错。比如:
function foo()

	return 1i;




另外许多计算器内置函数在复数和实数两种模式中计算结果不同,因此如果自定义函数中调用了内置函数,结果会不同。
function foo(x)

	return sqrt(x);


如果实数模式调用foo(-8),将会报错,但复数模式可以运行。
因此,在使用内置函数时,请特别注意当前的模式。
您编写函数时应该尽可能考虑兼容性,即让您的函数在实数复数模式下都能正确运行。

9.2 函数头

格式:funtion 函数名(参数列表)
参数列表不需要类型,只需要给出变量名。如果没有参数,则空着;如果多余一个参数,参数中用逗号隔开。
这些参数是按值传入的,所以即使在函数体中,参数值发生了变化,原来的那些变量的值不会改变。
因为函数返回的只能是值,所以不需要定义返回值类型。在复数模式下,返回复数;在实数模式下返回实数。
例子:
function foo1()
function foo2(a)
function foo3(val,data,i,j)

9.3 变量定义

格式:var 变量列表;
一切在函数中用到的临时变量都应该在此处定义,如果没有临时变量,则不用定义。
这里定义的变量是局部变量,只能在当前这个函数中使用。
定义以分号结尾。变量之间用逗号隔开。
var a,b;
或者
var Example1;
以下例子是错误的:
function foo(a)
var b,c;
var d;

	...




不应出现两次var,应该改为
function foo(a)
var b,c,d;

	...


9.4 函数体

函数体由“”开头,“”结尾。
由一条以上的语句构成。和绝大多数编程语言一样,基本语句以分号结尾。基本语句包括赋值语句、存储语句、返回语句、break语句、continue语句。

·赋值语句

格式:变量名=数值表达式;
数值表达式在之前已经讲解过了。
写赋值语句时,别忘了最后的那个分号。

·存储语句

格式:store(数值表达式, 存储器名);
如果存储器列表中没有相应的存储器,那么该存储器会被新建;如果有相应的存储器,那么该存储器的值会被覆盖。
另外,为了兼容,如果存储一个复数,则只有实数部分会被存储。这点请特别注意。
例子:
a=3.8;
store(a,mem1);
store(a+1,mem2);
store(5*7,mem3);


运行结束后,在存储器列表中,mem1保存值3.8,mem2保存值4.8,mem3保存值35。

·返回语句

格式:return 数值表达式;
程序到此即返回,下面部分不再执行。

·if语句

格式1:if (条件表达式) 语句
格式2:if (条件表达式) 语句 else 语句
条件语句可以嵌套。

·条件表达式

条件表达式类似大多数编程语言。
大小比较符不能连用,即1<2<3这种表达式是错误的。
优先级也类似大多数编程语言。以下是所有操作符的优先级:
最上面的具有最高优先级,最下面的具有最低优先级,处于同一行的操作符的优先级相同。
逻辑非(!)
乘方号(^)
乘除号(*、/)
加减号(+、-)
大小比较符(>、>=、<、<=、==、!=)
逻辑与(&&)
逻辑或(||)


注意:为了兼容,在复数模式下,>、>=、<、<=四个符号只比较复数的实数部分,=和!=是比较实数和虚数部分两个部分。


例子(没有实际意义)

if (!(year==2001&&year==2002))
	year=year+1;
else if (year/4000==0)

	year=year+2;
	ok=0;



·while语句

格式:while(条件表达式) 语句
和绝大多数编程语言一样,此处不再讲解。

·for语句

格式:for 变量名=起始数值表达式 to 终止数值表达式 step 间隔数值表达式  语句

没有“do”,软件内置文档在此处有误,以本文为准。)
执行过程如下:
(1)计算起始数值表达式,赋给变量。
(2)计算终止数值表达式,如果变量小于等于终止数值表达式的值,跳至3;否则跳至5。
(3)执行循环体。
(4)计算间隔数值表达式,此值加上变量赋给变量本身,跳至2。
(5)执行for语句以后的语句。
注意:每次终止数值表达式和间隔数值表达式都会被重新计算,所以如果数值表达式中有变量,请尽量不要在循环体内部改变该变量的值(除非有特殊需求)。
例子:

sum=0;
for i=a to b step 1
	sum=sum+i;



·break和continue

while语句和for语句内部可以使用break和continue,也可以使用return。当然break和coontinue后面有一个分号。


10、其他

10.1 循环体

多个语句组成循环体时,应用“”“”括起来。

10.2 变量初始化

一切变量应该先初始化,否则值不能确定。

10.3 递归调用

在函数中可以使用内置函数,也可以使用函数自身或其他自定义函数。不需要函数声明,只要运行的时候,所有被使用的函数均有明确定义即可。
如果您新建一个函数,取名fib,然后把函数体设为:


您就可以使用fib进行计算了。这里有自身递归调用。


下面例子是两个函数互相递归调用。

您新建一个函数,取名foo,然后把函数体设为


然后再新建一个函数bar



这样您就可以使用foo和bar了。

注意:编辑函数的那个编辑框中只能编辑一个函数,绝对不能在一个编辑框中输入两个函数,也不能建立局部函数。

10.4 函数注释

“/*”和“*/”中间可以加入注释。
例如:
/*This is an example.*/


多行注释推荐使用Java风格,即
/**
 * This is an example.
 * This is just an example.
 */

不支持“//”的注释。

11、如何编写好的函数

·要把函数描述写好。
·为了兼容,注释尽量用英文。
·考虑输入的各种情况。如果您编写的一个函数在某些不符合要求的输入下不应继续运行,那么可以对符合要求的输入返回相应的值,对不符合要求的输入不返回值。这样,如果输入不符合要求,在函数运行结束时,由于没有返回值,计算器会报错,计算便终止了。具体请参见下文的例子。


12、有用的例子

·函数名:rand2


·描述:rand2(a,b)返回一个均匀分布于[a,b)的随机数。如果a和b中的任一个有虚数部分或a大于等于b,函数将报错。


·代码:
function rand2(a,b)

	if (a==conj(a) && b==conj(b) && a<b)
		return rand(b-a)+a;




·函数名:gaussian


·描述:gaussian(mu,sigma)返回一个均值为mu,标准差为sigma的高斯分布(正态分布)的随机数。如果sigma<=0,函数将报错。


·代码:

function gaussian(mu,sigma)
var u1,u2,temp;

	if (mu==conj(mu) && sigma==conj(sigma) && sigma>0)
	
		/**
		 * Since rand(1) returns a uniformly distributed random number between 0.0 (inclusive) and
		 * 1.0 (exclusive), 1-rand(1) returns one between 0.0 (exclusive) and 1.0 (inclusive).
		 */
		u1=1-rand(1);
		u2=1-rand(1);
		/*Use Box-Muller transform to generate a standard Gaussian distributed random number.*/
		temp=sqrt(-2*ln(u1))*cos(2*pi*u2);
		return mu+temp*sigma;
	


以上是关于小飞计算器(小飞可编程复数计算器)用户手册的主要内容,如果未能解决你的问题,请参考以下文章

小飞侠带你精通Python网络编程系列04-Python内置的数据类型

罗小飞:阿里云边缘云,从资源到场景的产品演进

编程之美读书笔记1.8 - 小飞的电梯调度算法

小飞侠带你精通Python网络编程系列01-为什么是Python?

为什么选择ASP.NET Core

FFT快速傅立叶变换的工作原理