Skip to content

FinalTheory/Calculator

Repository files navigation

计算方法考试专用插件(For FX-9860GII)

程序简介

  • 嗯……就是个原理上十分简单但是实现起来十分蛋疼的小程序,运行在CASIO计算器上,用来简化计算方法考试时候的复杂计算过程,可以输入题目数据后直接输出过程和答案,
  • 当然也可以把公式直接打出来,比如不好记的那些差分格式、迭代格式之类,只不过要多写一些输出语句而已;
  • 现在仅仅实现了Jacobi和Gauss_Seidel迭代、高斯消元以及LU分解,剩下的其他类型题目留待以后慢慢写;
  • 欢迎大家试用,虽然写这个东西其实只是我想表达对今年考试题目略蛋疼的一点鄙视而已——妈蛋那个LU分解让我按了半天计算器!!!

使用方法

  • 这个程序属于Add-in插件,安装方法官方有提供,详见这里
  • 当然,首先你得有CASIO的计算器,型号是FX-9860GII,可以在这里找到。
  • 如果你像我等屌丝一样买不起的话,猛戳这里或者这里可以下载SDK和模拟器先试用一下(第二个链接是卡西欧官网,不过似乎需要翻墙)。
  • 唔,最后,代码和编译好的程序(CALC.G1A)扔到GitHub上了,猛戳这里;如果想自行patch和编译鄙人的渣代码的话,还需要参考这里

无责任吐槽

  • 写这个小东西的初衷原本是为了简化计算方法考试中的无意义计算。

  • 比如蛋疼的期末考试,LU分解那部分我先是用计算器自带的求解功能来求解,结果解出来一看就知道不好算,活活按了半天计算器。

  • 不过写着写着发现实际难度远比预想的要大很多, 恶心的地方主要有以下这些:

    • CASIO给提供的SDK里IO相关的函数实在是太底层了,C语言的printf、scanf神马的压根就没有,而他们给提供的输出函数基本就相当于必须指定屏幕位置然后再Print一个字符的那种。
    • 至于说键盘输入?呵呵,和汇编里直接处理键盘中断差不多,然后直到我开始测试的时候才发现忘了实现负数输入……囧rz
    • 更恶心的是SDK附带的编译器明明是支持C++的,但是不知道他们公司怎么想的,就是不让你用。好在这个也不是完全解决不了,只是每次编译需要手动执行脚本,不能用 IDE来编译了而已,因为用IDE的话每次还非要把makefile覆盖掉。
    • 这里面仍然比较恶心的是C++不允许函数重载,勉强理解成是嵌入式系统为了性能考虑吧,不然那一整套匹配规则又是不小的开销。
    • 相当奇葩的一点是代码里引用未定义的变量编译器居然不报错,简直是我等手残党的末日,各种不小心笔误引发各种奇葩bug……
  • 于是又整整写了一套IO函数,相当于初步在计算器上实现了C++的iostream,虽然比较粗糙但是勉强能用。前面还实现了一个分数运算库,这个就相当粗糙了,各种异常都没有处理,比如溢出神马的,甚至没为它重载输入操作符。

  • 然后又发现这帮人根本没有开放运算表达式解析的接口,也就是说解析表达式的工作还得自己写。虽说用C++来实现这个也就是个时间和细心的问题,但是我要是把这个都自己再实现一遍那就跟自己开发计算器上层固件也没差多少了吧,于是果断放弃之。

  • 于是最后发现仅仅利用现有的功能,能够解决的计算起来比较麻烦的考题也就只有下面这些:

    • 牛顿插值
    • Hermite插值
    • Romberg积分
    • LU分解和高斯消元
    • Jacobi、Gauss、SOR迭代之类
  • 把这些东西重写一遍并且在那种小屏幕上做到输出简洁美观实在是太麻烦,而且最近时间比较紧,所以就先做到这里了,只是顺手改写了几个消元和迭代简单算法,待以后有空再加以完善。

  • 不过其实IO现在既然已经基本完善了,像输出过程什么的就基本没难度了,无非就是在循环里多加几句cout而已。

  • 欢迎吐槽

About

计算方法考试专用插件

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published