易码技术论坛

 找回密码
 加入易码
搜索
查看: 275425|回复: 10

[转贴]GVBasic中处理用户表达式的另类方法

[复制链接]
发表于 2005-1-10 09:18:00 | 显示全部楼层
傻孩子(2004-6-21 7:21:14):
常规解法:
这是一道数据结构——栈的运算的题目,需要建立两个栈,一个存储数据,一个存储符号
具体流程如下
用字符串读取整个算式
用逐个扫描的方法以符号和数字为基本单位读取数据(字符串操作)
如果是数字,则压入数据栈/如果是运算符,则察看运算符的优先级,如果当前最优先,则再度取下一个数字计算,将计算结果压入数据栈;如果不优先,则将运算符压入符号栈
扫描完成后,读出数据栈顶元素和符号栈顶元素,计算后,将结果压入数据栈,重复以上步骤,直道栈空
这就是计算机处理表达式的方法——basic实现起来可能有些麻烦,要有耐心哦
至于上面提到的解法,代码我的确没写,最近忙于xx事情拖不开身,不过想请o_o同志看看本贴,结合你在本版面写的那个贴子,写一下代码,至于basic语句的accii码值,可以从别人的帖子中查到哦。
谢谢,我这个人有点光说不练——可能真的是我智商不够吧——我是傻孩子嘛!
 楼主| 发表于 2005-1-10 09:19:00 | 显示全部楼层
傻孩子(2004-6-28 21:32:44):终于找到源代码了,感谢会员baiynui_1983的代码
:
1 GOTO 10
2 DEF FN F(X)=::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
3 RETURN
10 GOSUB 751RINT "
 楼主| 发表于 2005-1-10 09:20:00 | 显示全部楼层
laugj(2005-1-10 9:01:27):
原理是代码写到$2000+n处
让GVBASIC自己运行用户写的代码,原理很简单
但是非常实用!
大家在做RPG游戏时写公式可以用到此技术!

2828_7_1213.rar

27 KB, 下载次数: 451

6593_7_2628.rar

298 KB, 下载次数: 427

发表于 2005-1-10 18:17:00 | 显示全部楼层
在GVBASIC环境下使用POKE写程序区,这个操作理论上是完全可行的,但是在长期使用过程中曾偶尔出现致命错误的现象,所以说:
办法确实巧妙,但如果对稳定性要求较高的话,应该尽量避免这个用法。
 楼主| 发表于 2005-1-11 16:59:00 | 显示全部楼层
如果能准确掌握地址,是个好事
发表于 2005-2-4 15:20:00 | 显示全部楼层
前几年我在自己的pc1000a上写过个函数作图工具,支持所有gvbasic所支持的表达式,用的就是这个方法,本来写的很完美的(个人感觉,对比我所用过的同类basic软件,那时写了我两个月的!!!欣喜地是为以后学其他语言打下了个很好的基础),谁知上传到ggv那里就没了音信,严重打击了我的积极性,从那时我就不再wqx上写basic了.......
 楼主| 发表于 2005-2-4 20:07:00 | 显示全部楼层
这个方法稳定性不是好~哦
如果能算好地址的话就是绝对的好用~~!
发表于 2005-2-4 23:02:00 | 显示全部楼层
算地址很简单的,在查找程序里加入这样的语句
2 DEF FN F(X)=::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
在内存中查找一下连续出现的冒号,再稍微验证一下就可以了得到相应的地址
发表于 2005-2-4 23:04:00 | 显示全部楼层
感觉上basic用这种方法算表达式的值在速度上还不错
发表于 2005-12-30 13:23:00 | 显示全部楼层
收益非浅!
 楼主| 发表于 2005-1-10 09:17:11 | 显示全部楼层 |阅读模式
傻孩子(2004-6-19 18:48:56):

曾看见有人问对于形如

用户输入(3+4)/5的表达式,如何操作
常规的方法使用栈的操作——具体如何,我就不细说了

但是,还有一个变态的方法,也不知有人想到没有,反正我是一想到就兴奋不已
注意到本版面上的那个帖子,再basic中调用另外的basic程序了么?

用的就是这个方法,原理很简单,将用户输入的表达式和print一起作为一个basic程序poke到内存中,然后运行,就能得到结果了。

有的星迷可能要问,如果我想在程序中获得这个表达式的值怎么办呢?你可以把和文件操作的程序写在一起,然后poke进内存,这样,你就可以通过读文件的方式获得这个结果。

是不是很贼呀?呵呵
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 11:51 , Processed in 0.015428 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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