准备做个ipad 计算器app。

~候鸟 ~ 2024-11-17 07:26:47
最佳回答
我来构思一下,其实计算器算是有点小复杂。先观察一下mac上的计算器程序。它有一个显示窗口,下面是按键。随便输入一些东西,会发现有几个需要注意的地方。a如果连续输入数字会累加成一个数字,但是不是单纯的字符串连接然后转换成数字。比如依顺序按1,2,3键,输入框会先显示1 然后显示12 然后显示123。这个过程中,这个数,都是一个整数。如果你现在再按一下小数点,会发现变成了123. 然后不管你再按多少小数点,都还是123.不变。如果继续按数字键,会继续按float的形式累加。这时你再按小数点键,也不会有反应的。b除了数字,计算器的按键还剩下操作符。通过一些尝试,发现操作符有两种,一种是二元的。比如,你先输入123 屏幕显示123,再按+,屏幕显示123+,此时如果你按其他二元操作符,只会将123+变成其他二元操作符对应的符号,比如你按*,就会变成123*。如果你再继续按数字键输入一串数字,比如456这时会变成456+。在这种情况下按=号,会开始计算并显示结果。 另一种是一元的,比如,√ ̄,当你输入4,再按下√ ̄按钮,结果会直接计算出来,这里是2 值得注意的是,比如前面说到的,先按123,再按+,这时显示123+了,如果你现在按√ ̄会直接计算123的平方根。还有一点,比如你依次按下1,+,1 现在显示1+ 如果你再按一下一个二元操作符,比如*,这时1+1会马上计算,变成结果,再加上你刚出输入的二元操作符现在是2*。另外有点特殊情况,就是如果你先按1,再按+,这时直接按等号,会当成1+1来计算的。c小结,以此可见,计算器在运算的逻辑上,采用一种规则,这种规则可以归纳如下: 1. 表达式由数字和操作符组成 2. 表达式的结果是一个数字,或者是一个非数字(有的特殊运算的特殊条件会出现这种数学上未定义结果) 3. 一元操作符只和一个数字相关,并且会立即计算结果 4. 二元操作符和两个数字相关,不会立即计算结果,会在=操作符被按下时,或者另一个二元操作符被按下时计算,特殊情况,在一个数字和一个二元操作符的情况按下=,相对于,把这个数字分别作为二元操作符的两个操作数来计算。 5. 表达式的结果,会直接保留,显示,并可以开始下一次计算。好了,现在可以大概的开始设计计算器的组成元素了 定义抽象基类,calcunit :nsobject计算单元。把数字和操作符都视作计算单元 有抽象方法 nsstring* d**play; //获取显示字符串定义数字, calcnum : calcunit 定义一元操作符calcunaryoperator : calcunit 定义枚举类型:unarytype {sqrt, cos, sin} 等 有私有成员 unarytype type; 初始化方法 id initwithtype:(unarytype) atype; 方法 calcnum* calculate:(calcnum*) input1;//计算结果 定义二元操作符calcbinaryoperator :calcunit定义枚举类型:binarytype {add, minus, div} 等 有私有成员 binarytype type; 初始化方法 id initwithtype:(binarytype) atype; 有方法 calcnum* calculate:(calcnum*) input1 binary:(calcnum*) input2 ;//计算结果这两类操作符的用法是,比如按下+号,就初始化一个 calcunit* unit = [ [calcbinaryoperator alloc] initwith:add]; 把它压入表达式栈。 然后定义表达式栈expression ,它的成员由一个长度为3的nsmutablearray 一个代表栈顶位置的整数top组成,它的方法有 void push:(calcunit*) unit; //压入计算单元 calcunit* pop; //弹出计算单元 void clean; //清栈 (计算器的清栈,其实是清除栈内容后,再压入一个数字0) calcunit* peek:(int)position; //观察栈上指定位置的单元 我们的calculator计算器类,方法很简单,只有 void put:(calcunit*) unit; //放置一个计算单元,对应ui一次按键 void start; //开始计算结果, 对应按下=号 nsstring* getd**playcontent; //返回显示内容,计算器初始化后马上调用这个,会得到字符串“0”,每次按键后,调用这个,会获得计算后的显示结果。 calculator管理着表达式栈,比如,你点了1+1,表达式栈里面分别有了这3个单元,点击等号时,你开始计算,这时你遍历表达式栈,发现有2个num,一个operator。符合小结的第4种情况,肯定这是一个二元操作符,这时你把2个num按其在栈上的先后顺序传给operator的 calcnum* calculate:(calcnum*) input1 binary:(calcnum*) input2 ; 结果搞定,清栈,把结果压入栈。比如,你点了2键,再点√ ̄键,这时calculator发现输入的是一个一元操作符,符合小结的第3种情况,立即计算调用operator的calcnum* calculate:(calcnum*) input1; 结果搞定,清栈,把结果压入栈。比如 在表达式栈为1+1的情况下,你按+键,符合小结第3种情况,直接计算,把结果压栈,再压入+操作符。这些东西归纳的很粗糙,已经可以满足初步的功能,有的细节,你修改一下就可以满足。 20210311
汇率兑换计算器

类似问答
  • 在线计算器,保险计算器。
    • 2024-11-17 11:59:49
    • 提问者: 未知
    计算器是计算上车险费用的,平安的车险计算器很好,你可以去找下
  • 房贷计算器app如何计算个人组合贷款明细
    • 2024-11-17 18:14:38
    • 提问者: 未知
    1首先进入手机系统, 找到房贷计算器app,点击房贷计算器图标点击进入2进入房贷计算器app,找到组合贷款,点击组合贷款进入3进入组合贷款,输入相关商贷公积金贷,等金额明细,点击下方的立即计算进入4进入立即计算,查看相关个人组合贷款还款明细信息end
  • 买房贷款计算器,购房贷款计算器,汽车贷款计算器哪里比较准确
    • 2024-11-17 08:17:06
    • 提问者: 未知
    现在放款都是比较麻烦的,建议你如果急着要钱的话还是找些**公司吧,安徽借贷网是省内第一家独立运营的,专业提供权威、准确、及时、全面的贷款资讯、供求信息的
  • 计提坏账准备 怎么做分录
    • 2024-11-17 06:37:22
    • 提问者: 未知
    计提坏账准备2113 借:资产减值损5261失—计提的坏账准备41021653 贷:坏账准备 发生坏账 借:坏账准备 贷:应收账款-xx单位 坏账计提多了冲回 借:坏账准备 贷:资产减值损失—计提的坏账准备 转销的坏账又回收 借:应收账款-xx单位 贷:坏账准备 借:银行存款 贷:应收账款-xx单位。扩展...
  • 房贷计算器app如何使用?房贷计算器怎么算月供?
    • 2024-11-17 01:29:36
    • 提问者: 未知
    于是,生活增添了一个新的名词—房贷。计算房贷首选房贷计算器app,准确无误又方便快捷。那么,大家知道房贷计算器app如何使用吗?在今天的文章里面告诉了大家答案.
  • 支付宝app有贷款利息计算器吗
    • 2024-11-17 22:19:43
    • 提问者: 未知
    有房贷计算器和存款利率计算器,
  • 计算机专业进银行工作应做怎样的准备
    • 2024-11-17 13:15:34
    • 提问者: 未知
    如果是学生进银行的话 不论你是哪个专业的 进去的工作都是一样的 从基层做起。...虽然你是计算机方面的,但是你要让他们知道你对财会方面略知一二(一般银行比较倾向于这个...
  • 开发一个app需要多少钱?都需要做哪些准备?
    • 2024-11-17 12:13:35
    • 提问者: 未知
    由市场基础吗,有投资吗,……,先给自己打几个问号再来纠结这个问题!
  • 关于手机可编程计算器app的计算结果
    • 2024-11-17 03:05:47
    • 提问者: 未知
    如果手机需要下载安装软件应用,建议尝试: 1.使用手机功能表中自带的浏览器上网,直接搜索需要的软件进行下载安装(下载安卓版本格式为apk)。2.使用电脑下载apk格式的安装包,连接数据线传输至手机,操作手机在应用程序-我的文件中找到安装包,运行后点击安装按钮。3.下载完成后点击下载的应用,根据...
  • 2021年工伤赔偿标准计算器
    • 2024-11-17 06:38:28
    • 提问者: 未知
    伤残补助金:一级为27个月的本人工资,二级为25个月,**为23个月,四级为21个月,五级为18个月,六级为16个月,七级为13个月,八级为11个月,九级为9个月,十级为7个月。...
汇率兑换计算器

热门推荐
热门问答
最新问答
推荐问答
新手帮助
常见问题
房贷计算器-九子财经 | 备案号: 桂ICP备19010581号-1 商务联系 企鹅:2790-680461

特别声明:本网为公益网站,人人都可发布,所有内容为会员自行上传发布",本站不承担任何法律责任,如内容有该作者著作权或违规内容,请联系我们清空删除。