查看: 105|回复: 1

Calculator 使用手册

[复制链接]

3

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2022-9-21 18:31:07 | 显示全部楼层 |阅读模式
简介

        Calculator 是一款运行于 Windows 系统上的计算程序. 支持大数运算(四则运算、模运算、阶乘等)、分数运算、进制转换、变量定义、不定方程求解等. 矩阵运算也在加入中.
        程序文件为 calculator.exe 和 CalculatorApp.exe, 前者是控制台应用软件, 后者是其 GUI 版本. 这两个文件均可在 atzjg.net 首页上下载.
        若非特别指明, 以下都使用 Calculator 指代 calculator.exe 和 CalculatorApp.exe.
历史

        此项目开始于2018年11月24日. 可以在命令窗口中输入 :dev_history 并回车, 列出开发历史.
下载

数学 首页有下载. 或直接点击下面的链接.
calculator.exe (控制台应用)
CalculatorApp.exe (GUI版本)

<hr/>命令

        Calculator中的命令均以冒号(:)开头, 例如 :version, 用于显示软件的当前版本号.
指令功能
:help显示基本的帮助信息
:h同 :help
:more显示更多功能
:dev_history显示开发历史
:clc清除Result和Trace窗口中的内容
:thanks显示“欢迎使用Calculator”
:aboutCalculator 简介
:exit退出程序, calculator.exe 中有用.
:quit同 :exit
:q同 :quit
:version显示软件当前的版本号

<hr/>四则运算

基本的四则运算

        在命令窗口(Command)中输入  (5 + 2) * 3 / 7  然后回车, 将在输出窗口(Result)中得到结果
in> (5+2)*3/7

out> 3阶乘

例, 计算 20 的阶乘.
in> 20!
out> 2432902008176640000        或者使用内置函数 factorial(20)
in> factorial(20)
out> 2432902008176640000        如果使用 Factorial() 函数, 则会将 20! 进行因数分解.
in> Factorial(20)
out> expr = 2^18*3^8*5^4*7^2*11^1*13^1*17^1*19^1

2432902008176640000
运算符的优先级

        主要的运算符有 +, -, *, /, %, ^, !, ==, ~. 其中 == 是比较运算符, 与之等价的是~.系统会自动替换为 ~.
        ~ 的优先级最低, 阶乘运算符 ! 的优先级最高. 但当碰到小括号(), 则小括号内的先算.
        ^ 的优先级次之, 即只比 ! 低. 例如 2^3! 将返回 64, 而不是 40320, 即 (2^3)!.
        *, /, % 分别是乘法、除法和整除运算符, 它们的优先级相同. a%b 所得是不完全商, 仅当 b|a 时才是完全商. 例如: 7%3 返回 2.
        +, - 的优先级仅比 ~ 高.
关于表达式中的空格

        输入的表达式中允许有空格, Calculator 在计算之前将这些空格自动去掉.
in> 1.2*3+(4.5-6)/7

out> 3.38571429        这里看到数值计算的精度默认是八位, 最后一位四舍五入而得. 设置精度的函数是 setprecision().
设置精度

        例如, 我们将精度设定为十位, 即小数点后面保留十位有效数字.
in> setprecision(10)
Now the precision is: 10
计算模式

        Caculator 启动后默认的计算模式是数值计算模式, 使用 :mode 命令可以查看当前计算模式.
:mode
Calculating mode: numerical

>>         最后的 >> 是控制台应用中的输入提示符. 在 GUI 版本中, 默认命令或表达式在 Command 窗口中输入, 因此可以忽略这个提示符.
更改计算模式

        目前计算模式有数值计算和分数计算两种. 当输入 :mode=xxx (其实这里的xxx可以是任意字符, 比如输错了的情况)并回车, 系统会给出正确的提示.
Syntax:
        :mode=fraction
        or
        :mode=numerical
        or:mode
        This will print the current calculating mode.

        >>                 也就是, 命令 :mode=fraction 将切换到分数计算模式, 而 :mode=numerical 将切换到数值计算模式.
        要进行分数计算, 请先切换到分数计算模式.
<hr/>内置函数

        Calculator 内置了一些有用的函数. 使用 listfunctions() 或 listfunctions(1) 列出所有内置函数. 后者(提供参数1)将列出函数的具体签名. 可以使用 help(函数名) 列出此函数的具体用法.
        具体请下载 CalculatorApp.exe, 查看帮助文档.
        目前 Calculator 0.522 Pro 版本提供了 80 个函数.
<hr/>进制转换

        Calculator 提供了十进制与二进制、八进制、十六进制等之间的相互转换.

十进制转二进制

decimal2binary()        功能: 将十进制数转成二进制形式.
        参数: 单参数, 接受十进制数.
        例
in> decimal2binary(20220820)
out> 1001101001000101110010100
二进制转十进制

        binary2decimal()
        功能: 将二进制数转成十进制形式.
        参数: 单参数, 接受二进制数.
        例
in> binary2decimal(1001101001000101110010100)
out> 20220820
任意进制转十进制

        any2decimal( , )
        功能: 任意p进制数转成十进制形式.
        参数: 双参数.  第一个参数是p进制数的表达式, 第二个参数是 p.
        例
in> any2decimal(12ABGH9JK8,36)
out> 108010759187528
十进制转任意进制

        decimal2any( , )
        功能: 十进制数转成任意p进制形式.
        参数: 双参数.  第一个参数是十进制数的表达式, 第二个参数是要转换的进制 p.
        例
in> decimal2any(108010759187528,36)
out> 12abgh9jk8
十进制转八进制

        decimal2octal()
        功能: 十进制数转成八进制形式
        注意: 返回的八进制数以0开头.
        例
in> decimal2octal(1010)
out> 01762
八进制转十进制

        octal2decimal()
        功能: 八进制数转成十进制形式
        注意: 输入的八进制数以0开头.
        例
in> octal2decimal(01234567)
out> 342391
十进制转十六进制

        decimal2hex()
        功能: 十进制数转成十六进制形式
        注意: 返回的十六进制数以0x开头.
        例
in> decimal2hex(1010)
out> 0x3F2
十六进制转十进制

        hex2decimal()
        功能: 十六进制数转成十进制形式
        注意: 输入的十六进制数以0x开头.
        例
in> hex2decimal(0xFF)
out> 255<hr/>分数运算

        Calculator 提供了分数运算的功能. 在进行分数计算前, 请先设置计算模式为分数计算模式. 关于计算模式, 见“四则运算”一节.
        首先, 使用命令 :mode=fraction 将模式切换到分数计算模式
:mode=fraction

Switch into fraction calculating mode.
e.g., 1/2+1/3 will return 5/6

>>         这里给了一个例子, 输入 1/2+1/3 将返回 5/6. 如果在 numerical 模式下, 则返回 0.83333333.
        我们再试一下其他例子, 输入 1/2+1/3+1/4+1/5+1/6
in> 1/2+1/3+1/4+1/5+1/6

out> 29|20        (这里使用 | 作为分数线的记号.)
        如果要计算 1+1/2+1/3+1/4+1/5+...+1/100, 那么最好使用求和函数 sum( , , , ). 这个函数需要输入四个参数, 输入 help(sum) 会提示用法如下:
Usage:
sum(general_term,x,minValue,maxValue)        第一个参数指通项表达式, 第二个参数指自变量采用的符号, 第三和第四个参数指自变量的取值范围. 注意这里 x, minValue, maxValue 都是整数, 且 minValue<=x<=maxValue.
        因此, 要计算上面的求和, 我们只需输入
in> sum(1/n,n,1,100)

out> 5.18737752        如果在分数计算模式下, 则结果是         
14466636279520351160221518043104131447711|2788815009188499086581352357412492142272十进制小数转为分数

        这里提供了两个函数 decimal2fraction() 和 decimalToFraction(). 前者将输出整数部分与真分数部分相加的形式, 同时也输出假分数形式; 而后者只输出假分数的形式.
        例
in> decimal2fraction(3.7)
out> 3+7/10==37/10

in> decimalToFraction(3.7)
out> 37|10
<hr/>算廿四

        算廿四是一个扑克牌游戏, 其规则大家耳熟能详. 一副扑克牌, 去掉大小王, 将 A(即Ace)视为 1 或 11; 2,3,...,10 按牌面数字取值; J, Q, K 都算作 10. 随意抽取四张牌, 如果谁能用加减乘除先算得 24, 谁就胜.
        例如, 如果抽到 8, 3, 1, 9 四张牌, 那么我们可以这样算得 24.
        (9/3)*8*1
        现在使用内置的 eq24() 函数, 可以轻松得到所有可能的计算表达式.
        >> eq24(8,3,1,9)
        in> eq24(8,3,1,9)

        8*1*9/3==24
        (8*9)/(3*1)==24
        3/(9/8-1)==24

        ------------------------

        Total: 3
<hr/>解方程

这里提供了 solve() 函数, 可以求解一般的整数方程. 语法为
solve(equation,x,minValue,maxValue)        第一个参数 equation 是方程的表达式, 其中等号要用连续的两个'=' 表示; 第二个参数 x 是指方程表达式中未知量的名称; maxValue, minValue 指 x 的上下界( x\in[\mathrm{minValue}, \mathrm{maxValue}] ), 当然这里的 x, minValue, maxValue 都是整数.
        例, 求解方程 x^{340}\equiv 1\pmod{341} . 我们可以如下解决
solve(x^340mod341==1,x,1,340)<hr/>解不定方程

        最简单的不定方程形如 ax+by=1 , 这可以使用函数 IndefiniteEquation(a,b) 求解.
        例, 求解不定方程 7x+9y=1 .
>> IndefiniteEquation(7,9)
in> IndefiniteEquation(7,9)
Solve the equation: 7*x+9*y = 1
9==1*7+2
7==3*2+1
1 3
test: -1==9*3-7*4
7*4-9*3 == 1
x = 4+9t
y = -3-7t


-----------***---------
out> 1        如果要求解 a_1 x_1+a_2 x_2+...+a_n x_n=b 这样的不定方程, 则应输入
IndefiniteEquation(a_1, a_2, ..., a_n; b)        注意 b 前面是分号.
        例1. 求解 25x-13y+7z=4
>> IndefiniteEquation(25,-13,7;4)
in> IndefiniteEquation(25,-13,7;4)
Solve the indefinite equation :
25*X1-13*X2+7*X3 = 4

u2=4-2u1
---------------
X2 = +2*u0+1*u2-u1
X1 = +1*X2-1*u2+u0
X3 = -3*X1+1*X2+u2

------------------------        例2. 求解 x+2y+3z=4
>> IndefiniteEquation(1,2,3;4)
in> IndefiniteEquation(1,2,3;4)
Solve the indefinite equation :
1*X1+2*X2+3*X3 = 4

X3=4-X1-2u1
---------------
X2 = -1*X3+u1
X1 = +X1

------------------------        例3. 求解 7x_1+4x_2-2x_3+3x_4=2
>> IndefiniteEquation(7,4,-2,3;2)
in> IndefiniteEquation(7,4,-2,3;2)
Solve the indefinite equation :
7*X1+4*X2-2*X3+3*X4 = 2

X4=2-X1-2*u2
---------------
X1 = +X1
X3 = +3*X1+2*X2+1*X4-u2

------------------------
<hr/>变量定义

定义变量

        定义方法很简单, 输入
a=1        即定义了变量 a, 其值为 1. 可以键入 disp(a) 查看其值.
        命令 :list 则列出所有已定义的变量, 在 Result 窗口和 Variables 窗口都有显示.
        例如: Result 窗口列出已定义的变量 a 和 b, 并附带列出了它们在内存中的地址.
info> All variables are listed below.
int : a = 1          mem addr: 04EA3760
int : b = 3          mem addr: 04EA3460
---*---*---*---        而Variables窗口则以列表的形式列出这些变量.
<hr/>矩阵

矩阵输入

        仿照简单变量的定义, 输入
A=[ 1 2; 3 4]        然后回车, 将得到一个2阶方阵. A 是矩阵的变量名. 如果仅输入
[ 1 2; 3 4]        则也会得到一个矩阵, 其具有内置变量名  __Matrix__ .
        上面也可以如下输入:
A=[1,2;3,4]        或多行输入:
A=[1,2;
3,4]基本规则

        在矩阵输入中, 空格和逗号都可以作为元素之间的分隔符, 分号是行结束符号. 矩阵元素的输入以左中括号[开始, 以右中括号]结束.

  •         逗号和空格可以同时作为分隔符;
  •         多个连续的空格等同于单个空格;
  •         相邻两个逗号中间有无空格都将自动插入0;
        例如:
A=[ 1, , 3]        得到矩阵     A=[1,0,3]
A=[ 1,2 3; 4 5, 7
; 2 3]        //注意第二行分号前面没有空格.
        得到矩阵
[var] A
1 2 3
4 5 7
2 3 0
input> [1,2,3;4,5,7;2,3]
det(A)=13        例
A=[1;
2 3;
4 5 6;
7 8 9 10]        将得到矩阵
[var] A
1 0 0 0
2 3 0 0
4 5 6 0
7 8 9 10
input> [1; 2 3; 4 5 6; 7 8 9 10]
det(A)=180
测试输入

B=[1 2 3
4;3,2,0
1;0,2,0,9;1,3,5,
-1]
行列式

        det() 函数用于返回矩阵的行列式, 如果矩阵不是方阵, 则返回 NaN.
        矩阵的元素可以是分数, 在默认的计算模式(numerical)下, 只返回行列式的计算表达式. 若要计算其行列式, 则切换到分数模式(fraction)下计算.
        例
A=[1/2 2/3; 3/4 4/5]回车后 Calculator 会显示下面的信息.
[var] A
1/2 2/3
3/4 4/5
input> [1/2 2/3; 3/4 4/5]
det(A)=1/2*4/5-3/4*2/3
--------------------上面顺带计算了矩阵 A 的行列式. 也可以输入 det(A) 获得.
det(A)为使计算所得的值是分数, 将计算模式切换至 fraction.
:mode=fraction
A=[1/2 2/3; 3/4 4/5]回车后, Calculator 显示
[var] A
1/2 2/3
3/4 4/5
input> [1/2 2/3; 3/4 4/5]
det(A)=-1|10
--------------------<hr/>
回复

使用道具 举报

2

主题

7

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2025-2-22 19:18:41 | 显示全部楼层
元芳你怎么看?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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