朔雪X忆 发表于 2010-9-10 20:11:53

NS编程教程之字符串函数

开此贴主要是解释NS编程中几个函数的重要作用……
这是Nelson Sousa的解方程程序的一部分,它的作用是提取输入的二次方程的系数。
输入格式为program(eq,var)
两个变量均以string格式输入。
下面我们来看代码:If inString(eq,"=")=0
eq:=eq&"=0"
j:=inString(eq,"=")
eq:=left(eq,j-1)&"+0-("&right(eq,dim(eq)-j)&")"
expr(eq&"|"&var&"=0")→c
expr(eq&"|"&var&"=1")-c→a_plus_b
expr(eq&"|"&var&"=-1")-c→a_minus_b
If inString(eq,"=")=0
eq:=eq&"=0"
j:=inString(eq,"=")
eq:=left(eq,j-1)&"+0-("&right(eq,dim(eq)-j)&")"
((a_plus_b+a_minus_b)/(2))→a
((a_plus_b-a_minus_b)/(2))→b
d:=b^(2)-4*a*c
If d<0 Then
............

朔雪X忆 发表于 2010-9-10 20:15:23

第一句中出现了函数inString, 此函数的作用就是判断某个字符在一个字符串中的位置,当字符串中没有对应字符时,返回0.
那么从第一句可以看出,如果用户输入的eq是一个形如"x^2-1"这样的不完整的方程,那么程序会自动判断到这一点,进入下一步:
eq:=eq&"=0"
这里的&在不完整的方程末尾加上了=0,也就是输入不完整方程默认等于0

朔雪X忆 发表于 2010-9-10 20:16:54

接下来j:=inString(eq,"=")
就是判断等号在方程中的位置,为下一步做准备。

朔雪X忆 发表于 2010-9-10 20:24:56

eq:=left(eq,j-1)&"+0-("&right(eq,dim(eq)-j)&")"
这一句把eq重新赋值了,我们分解开来看看:
left(eq,j-1)会输出eq这个字符串左数共j-1个字符,也就是刚刚那个例子的"x^2-1"部分。
然后&"+0-(",原方程变为"x^2-1+0-("【这一步的作用我不大清楚……】
然后&right(eq,dim(eq)-j)&")"
这里dim(eq)会输出eq这个字符串的字符数。
那么这句话的意思就是输出方程等号右边的内容。结合上面的那个减号和括号,不难理解"+0-("&right(eq,dim(eq)-j)&")"就是把方程左边的内容移项到右边

朔雪X忆 发表于 2010-9-10 20:30:53

expr(eq&"|"&var&"=0")→c
expr(eq&"|"&var&"=1")-c→a_plus_b
expr(eq&"|"&var&"=-1")-c→a_minus_b
这三句都用了expr,就是把string转换为expr,去掉引号执行…… 这里插一句,看看我的词典自动转换【表格-变量】程序的核心代码:
【在http://www.cncalc.org/viewthread.php?tid=4618】

expr(expr(string(en"_"&":="&string(ch))))
这行代码的作用是什么?NS会如何执行?

朔雪X忆 发表于 2010-9-10 20:32:37

接上……
expr(eq&"|"&var&"=0")→c
也就是说把该方程【已经移项】当x=0时的值代入系数c
所以用代入x的方法还可得到a+b和a-b
这大家不难理解吧。

朔雪X忆 发表于 2010-9-10 20:34:05

然后的几行……我想大家可以自行理解了~这个程序本身请见http://www.cncalc.org/thread-4653-1-1.html

Cyvre 发表于 2010-9-10 20:55:38

我想知道“&”是做什么用的?

朔雪X忆 发表于 2010-9-10 21:05:10

&就是连字符号啊

拯救地球好累 发表于 2010-9-10 21:05:20

就是字符串合并。

朔雪X忆 发表于 2010-9-11 15:25:09

此贴为何无人问津……管理员加个高亮吧……

yongdong7 发表于 2010-9-11 15:27:39

提醒LZ 7L连接有问题(我用的chrome)

yongdong7 发表于 2010-9-11 15:28:16

7L所说的11L也消失了= =

朔雪X忆 发表于 2010-9-11 17:40:46

已修改。

朔雪X忆 发表于 2010-9-12 14:23:05

强势顶起,NS程序上的问题可以发到此贴来。

imath 发表于 2010-9-12 15:25:57

阿拉问一下素学第页:
怎么不化简输出
比如我定义y=f(x),然后不对f(x)化简。
然后对f(x+1),直接用x+1整体替换x,而不进行进一步化简。

朔雪X忆 发表于 2010-9-12 19:24:30

直接代string格式。。。

Cyvre 发表于 2010-9-22 21:40:24

lz你干脆发个帖把ns的编程全部解释一下吧
(我估计那一堆函数我最多会四分之一)

朔雪X忆 发表于 2010-9-22 21:58:23

网上有教程的……不过都是英文……

朔雪X忆 发表于 2010-9-22 21:58:56

http://compasstech.com.au/TNS_Authoring/index.html
看看这里吧,相当强悍的编程教程……
【Authoring……】
页: [1] 2
查看完整版本: NS编程教程之字符串函数