
标题: [公告] Labs制造->MCode2.1 [打印本页]
作者: youd 时间: 2009-9-5 12:10 标题: Labs制造->MCode2.1
访问地址:http://labs.poketb.com/Mcode/
上一个版本的介绍:http://poketb.com/bbs/thread-11514-1-1.html
在学习学习再学习之后。完完全全的推翻了原来的解释方式,现在的核心程序更为严谨高效!
在这个版本中解决了上一个版本的一些问题(比如print a会报错,必须些微print +a,诸如此类)
另外更新内容如下:
引用:
2.1
绘图指令库加入绘制空间曲线参数方程
2.0
绘图指令库
1.0
变量使用前必须定义
变量的赋值及运算
解方程
希望有解决之道的人提供参考方法
已知BUG:
引用:
使用绘图指令绘制非连续函数(例如对数函数、反比例函数等)会导致其图像的无实解点落入(0,0)
我暂无方法判断一个函数的定义域。
BEGIN
VAR a,b,c
a=1
b=2
c=b^7-28*a
print "I Love PTB ",c," Years"
END
这是一个经典程序,在此我对其逐行描述引用:
1:BEGIN,代表程序开始,在程序开始后会解析代码 2:定义三个变量a,b,c(大小写敏感,尚未添加变量的命名规范,所以啥乱七八糟的符号可以以定义,再版后会修正) 3:把数字类型1赋值给a 4:同上 5:计算b^7-28*a并把值赋给c 6:打印一个结果,字符串与变量之间使用逗号连接,可以使用单引号 7:END,代表程序结束,结束之后的程序代码不会被解析
var 变量1[,变量2...]你既可以这样一次定义多个变量var a,b,youd,woodu也可以分多次定义
var a,b
var youd,woodu
但是需要注意的是,变量不可以重复定义。
3.为变量赋值
赋值分为两类“字符串型”以及“数学运算型”
这两种类型程序将自动识别。
比如
a='poketb'
b=100
这两个变量是字符串和数字型
如果使用a=a+b程序将直接连接这两个值,并以字符串输出“100poketb”赋给a
如果使用引用:
b=b+b*2
引用:
+加 -减 *乘 /除 ^指数(比如a^b,就是a的b次方 (左括号 )右括号
引用:
sin(x)正弦函数 floor(x)舍去法取整 sqrt(x)开方 ……
引用:
a=5+x*(8+x^(5-x))/9+16
print 内容1[,内容2……]
print大小写皆可。
print语句用于把结果输出到浏览器的结果栏里,每一个print都可以使用逗号连接任意变量以及字符串
但是不能连接数学或者字符表达式,比如
print a+b,"poktb"+"c"
是错误的。
每一个print执行过后都将进行换行,也就是说下一次输出就将在第二行显示。
6.解一个方程
至此才到本程序的原本目的。解方程作为数学中最基本的问题在这里得到实现
这是一个解方程的范例
BEGIN
VAR a
SOLVE x+3=x^2,x
GET_SOLVE a
PRINT a
END
引用:
1:开始 2:定义变量a 3:解方程 x+3=x^2的解,其中x是未知数 4:获取方程的解并赋给a 5:输出 6:结束
solve 方程,未知数命令可以大写。
方程是一个等式,在这个等式中你可以使用你已经定义了的数型变量
这个等式将包含一个未知数
未知数不能和已经定义了的变量重复,未知数的名可由你自己定义
比如solve t+t^2=2,t也是正确的
在解得方程后,必须使用
get_solve来获取方程的解get_solve 变量这个命令用于把方程的解赋给变量a,以便使用。
需要注意的是,是过于复杂的方程,很可能导致运算时间超长,解的精度下降,无解方程同此。
此算法只可解出单实数根,复根、多根无法给出,如果解一个多根方程,程序将只给出一个解。
7.绘图指令
绘图指令用作使用MCode绘制一个函数或者方程的图像。
7.1.介绍
使用方法如下:
范例:
BEGIN
BEGIN DRAW
DFT -4.5,4.5
VAR t
X cos(t)+t*sin(t)
Y sin(t)-t*cos(t)
DRAW
END DRAW
END
引用:
开始程序 开启一个绘图指令 设定参数或自变量的定义域 设定参数名或自变量名 绘制参数方程的X 绘制参数方程的Y 绘图 结束这个绘图指令 结束程序
FUN 函数解析式很简单吧?
也就是说当你在绘图指令之间使用FUN命令的时候,就可以按照f(x)=函数解析式 来绘制一个函数的图像
关于其绘图BUG,在起始已经有所描述。
7.3 NEXT命令
NEXT命令用于在同一坐标系内绘制另外一个图像,使用NEXT命令后
可以在一张图像上同时绘制多个函数或者方程。
范例如下
BEGIN
BEGIN DRAW
DFT 0,7
VAR t
X cos(t)+t*sin(t)
Y sin(t)-t*cos(t)
NEXT
X sin(t)
Y cos(t)
NEXT
X 1.5*sin(t)
Y 1.5*cos(t)
NEXT
VAR x
FUN x/2
DRAW
END DRAW
END
其含义相信看了前面的介绍后完全可以自行理解了~
其绘制结果为:
(一个以1为基圆的渐开线,一个以1为半径的圆,一个以1.5为半径的圆,一个函数f(x)=x/2)
7.4 扩展
当你使用多个BEGIN DRAW的时候(不可嵌套),则可以输出在不同的坐标系中。
这点可以自行尝试
7.5 设定显示值域RR
有时候会出现定义域很小,而值域极大的情况,这个时候产生的图像不利于观察
故添加此命令
使用方法同DFT命令RR 下限,上限注意,当定义域大小超过值域大小的时候,此设置无效。
7.6 绘制空间曲线
在这个版本中增加了空间曲线绘制的方法。依旧是一个例子:引用:
BEGIN BEGIN DRAW 3D DFT 0,19 VAR t X t*cos(t) Y t*sin(t) Z t DRAW END DRAW END
作者: 墨者happy 时间: 2009-9-5 12:15
咱有点稍微看懂了……
话说YY打这么多辛苦了……
感觉用了工作室编程会方便很多啊
于是咱打算去学编程了
作者: lzn3303768 时间: 2009-9-5 12:15
...我想知道有哪些关键字
...以及如果有一个变量名为slove会不会报错
...报错的信息是什么
...以及可以
print slove a+b^3
这样写么
...以及是否可以支持在括号内输入表达式和未知数
像这样:slove(a+b^3)
作者: youd 时间: 2009-9-5 12:21
文中已经说了,暂且没有设置变量的关键字判断以及条件设置
如果你写var solve
然后再solve=100
也是不会报错的。
关于print也说明了,不可以在其中使用表达式。可能再版后会添加这个功能
MCode基于命令式语言,所以解方程是一个内置命令,必须要用其他的命令来获得解,而不可一步完成。(一步而成可以使用递归完成,但尚无此打算)
作者: lzn3303768 时间: 2009-9-5 12:41
bug发现:
1.(疑似)(似乎上面的文字没讲)
begin
var a
a='我'
print a
end
无任何输出
2.(确定)过大的某些方程解不了...
begin
var b
solve 1+c=12031234321,c
get_solve b
print b
end
输出为错误的100
以及在页面最上方出现:
Warning: Division by zero in /home/poketb/domains/poketb.com/public_html/labs/Mcode/include/class/LoadCode.class.php on line 208
作者: youd 时间: 2009-9-5 12:52
中文字符串在匹配正则表达式的时候似乎会有问题。这个以后再想想解决之方法
过大的方程超过了PHP的数据类型允许的范围后会诶当作false,参与运算后将于第一步就跳出,所以结果是100.
作者: youd 时间: 2009-9-11 22:15
更新MCode2.0以及其使用文档
作者: roywillow 时间: 2009-9-18 17:39
歪歪……好伟大……
算法大师……
咱对算法一直不怎么样的
作者: youd 时间: 2009-9-25 23:11
2.1更新,新增了绘制空间曲线的功能。
| 欢迎光临 口袋社区-Poke The BBS (https://poketb.com/bbs/) | Powered by Discuz! 6.1.0F |