cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 9506|回复: 20

[Nspire] NS编程教程之字符串函数

[复制链接]
发表于 2010-9-10 20:11:53 | 显示全部楼层 |阅读模式
开此贴主要是解释NS编程中几个函数的重要作用……
这是Nelson Sousa的解方程程序的一部分,它的作用是提取输入的二次方程的系数。
输入格式为program(eq,var)
两个变量均以string格式输入。
下面我们来看代码:
  1. If inString(eq,"=")=0
  2. eq:=eq&"=0"
  3. j:=inString(eq,"=")
  4. eq:=left(eq,j-1)&"+0-("&right(eq,dim(eq)-j)&")"
  5. expr(eq&"|"&var&"=0")→c
  6. expr(eq&"|"&var&"=1")-c→a_plus_b
  7. expr(eq&"|"&var&"=-1")-c→a_minus_b
  8. If inString(eq,"=")=0
  9. eq:=eq&"=0"
  10. j:=inString(eq,"=")
  11. eq:=left(eq,j-1)&"+0-("&right(eq,dim(eq)-j)&")"
  12. ((a_plus_b+a_minus_b)/(2))→a
  13. ((a_plus_b-a_minus_b)/(2))→b
  14. d:=b^(2)-4*a*c
  15. If d<0 Then
  16. ............
复制代码

评分

参与人数 1金钱 +3 收起 理由
Cyvre + 3 不愧是ns帝啊!!!

查看全部评分

 楼主| 发表于 2010-9-10 20:15:23 | 显示全部楼层
第一句中出现了函数inString, 此函数的作用就是判断某个字符在一个字符串中的位置,当字符串中没有对应字符时,返回0.
那么从第一句可以看出,如果用户输入的eq是一个形如"x^2-1"这样的不完整的方程,那么程序会自动判断到这一点,进入下一步:
eq:=eq&"=0"
这里的&在不完整的方程末尾加上了=0,也就是输入不完整方程默认等于0
 楼主| 发表于 2010-9-10 20:16:54 | 显示全部楼层
接下来j:=inString(eq,"=")
就是判断等号在方程中的位置,为下一步做准备。
 楼主| 发表于 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)&")"就是把方程左边的内容移项到右边
 楼主| 发表于 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

  1. expr(expr(string(en[xx]"_"&":="&string(ch[xx]))))
复制代码

这行代码的作用是什么?NS会如何执行?
 楼主| 发表于 2010-9-10 20:32:37 | 显示全部楼层
接上……
expr(eq&"|"&var&"=0")→c
也就是说把该方程【已经移项】当x=0时的值代入系数c
所以用代入x的方法还可得到a+b和a-b
这大家不难理解吧。
 楼主| 发表于 2010-9-10 20:34:05 | 显示全部楼层
然后的几行……我想大家可以自行理解了~这个程序本身请见http://www.cncalc.org/thread-4653-1-1.html
发表于 2010-9-10 20:55:38 | 显示全部楼层
我想知道“&”是做什么用的?
 楼主| 发表于 2010-9-10 21:05:10 | 显示全部楼层
&就是连字符号啊
头像被屏蔽
发表于 2010-9-10 21:05:20 | 显示全部楼层
就是字符串合并。
 楼主| 发表于 2010-9-11 15:25:09 | 显示全部楼层
此贴为何无人问津……管理员加个高亮吧……
发表于 2010-9-11 15:27:39 | 显示全部楼层
提醒LZ 7L连接有问题(我用的chrome)
发表于 2010-9-11 15:28:16 | 显示全部楼层
7L所说的11L也消失了= =
 楼主| 发表于 2010-9-11 17:40:46 | 显示全部楼层
已修改。
 楼主| 发表于 2010-9-12 14:23:05 | 显示全部楼层
强势顶起,NS程序上的问题可以发到此贴来。
发表于 2010-9-12 15:25:57 | 显示全部楼层
阿拉问一下素学第页:
怎么不化简输出
比如我定义y=f(x),然后不对f(x)化简。
然后对f(x+1),直接用x+1整体替换x,而不进行进一步化简。
 楼主| 发表于 2010-9-12 19:24:30 | 显示全部楼层
直接代string格式。。。
发表于 2010-9-22 21:40:24 | 显示全部楼层
lz你干脆发个帖把ns的编程全部解释一下吧
(我估计那一堆函数我最多会四分之一)
 楼主| 发表于 2010-9-22 21:58:23 | 显示全部楼层
网上有教程的……不过都是英文……
 楼主| 发表于 2010-9-22 21:58:56 | 显示全部楼层
http://compasstech.com.au/TNS_Authoring/index.html
看看这里吧,相当强悍的编程教程……
【Authoring……】
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-22 00:56 , Processed in 0.072483 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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