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
............ 第一句中出现了函数inString, 此函数的作用就是判断某个字符在一个字符串中的位置,当字符串中没有对应字符时,返回0.
那么从第一句可以看出,如果用户输入的eq是一个形如"x^2-1"这样的不完整的方程,那么程序会自动判断到这一点,进入下一步:
eq:=eq&"=0"
这里的&在不完整的方程末尾加上了=0,也就是输入不完整方程默认等于0 接下来j:=inString(eq,"=")
就是判断等号在方程中的位置,为下一步做准备。 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)&")"就是把方程左边的内容移项到右边 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会如何执行? 接上……
expr(eq&"|"&var&"=0")→c
也就是说把该方程【已经移项】当x=0时的值代入系数c
所以用代入x的方法还可得到a+b和a-b
这大家不难理解吧。 然后的几行……我想大家可以自行理解了~这个程序本身请见http://www.cncalc.org/thread-4653-1-1.html 我想知道“&”是做什么用的? &就是连字符号啊 就是字符串合并。 此贴为何无人问津……管理员加个高亮吧…… 提醒LZ 7L连接有问题(我用的chrome) 7L所说的11L也消失了= = 已修改。 强势顶起,NS程序上的问题可以发到此贴来。 阿拉问一下素学第页:
怎么不化简输出
比如我定义y=f(x),然后不对f(x)化简。
然后对f(x+1),直接用x+1整体替换x,而不进行进一步化简。 直接代string格式。。。 lz你干脆发个帖把ns的编程全部解释一下吧
(我估计那一堆函数我最多会四分之一) 网上有教程的……不过都是英文…… http://compasstech.com.au/TNS_Authoring/index.html
看看这里吧,相当强悍的编程教程……
【Authoring……】
页:
[1]
2