当前位置: 首页 > 编程笔记 >

C++有限状态机实现计算器小程序

王飞虎
2023-03-14
本文向大家介绍C++有限状态机实现计算器小程序,包括了C++有限状态机实现计算器小程序的使用技巧和注意事项,需要的朋友参考一下

本文介绍利用有限状态机原理开发计算器小程序的过程。

实现的功能

  • 支持整数、小数输入
  • 支持+ - * / 四则运算
  • CE 清除当前操作数
  • C 清除所有、回到初始状态
  • 回显操作数和结果

HSM状态图

计算器可以分为七种状态:Start、Operand_1、Negate_1、Operator、Operand_2、Negate_2、Error。其中Start、Operand_1、Operand_1状态又分了几种子状态。 下面简要的介绍下状态状态转换的过程:

  • 启动软件,进入Start状态
  • 当用户点击1-9、0、Point按钮,软件进入Operand_1 状态。
  • 当用户点击+、-、*、/按钮,软件进入Operator状态。
  • 此时当用户再次点击1-9、0、Point按钮,软件进入Operand_2 状态。
  • 如果用户点击=按钮,软件就进入了Start状态。
  • 如果此时进行的是除法运算且除数为0,软件进入Error状态,用户只有点击C按钮才可以跳出。

在实际开发的过程中,我们只需要关心现在程序处在什么状态,可以进行什么样的操作。然后就是状态转换的条件要处理下。

代码片段

下面是CalculatorDlg.cpp中的一段代码,我们首先要获得当前的状态,然后进行相应的操作,操作完成之后设置好对应的状态。

void CalculatorDlg::enterOperation(Calculator::CalcOp oper)
{
 if (m_calculator.getCurrentState() == Calculator::CalcState::Error)
 {
  return;
 }
 if (m_calculator.getCurrentState() == Calculator::CalcState::Start ||
  m_calculator.getCurrentState() == Calculator::CalcState::Negate_1 ||
  m_calculator.getCurrentState() == Calculator::CalcState::Operand_1)
 {
  m_calculator.setOperand_1(_wtof(m_output));
 }
 else if (m_calculator.getCurrentState() == Calculator::CalcState::Operand_2 ||
  m_calculator.getCurrentState() == Calculator::CalcState::Negate_2)
 {
  m_calculator.setOperand_2(_wtof(m_output));
  UpdateData(TRUE);
  std::stringstream ss;
  ss << m_calculator.getResult();
  m_output = ss.str().c_str();
  UpdateData(FALSE);
  m_calculator.setCurrentState(Calculator::CalcState::Start);
  m_calculator.setOperand_1(m_calculator.getResult());
 }
 m_calculator.setCurrentState(Calculator::CalcState::Operator);
 m_calculator.setOperator(oper);
}

运行效果展示

源码查看

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 我需要设计一个有效的决策过程来确定非确定性有限状态机接受的语言是否为空。 我知道,若从初始状态到最终状态并没有路径,机器就不会接受字符串。 但我正在努力证明这一点或设计程序。 谢谢

  • 概述 Javascript Finite State Machine函数库 参考链接 概述 有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。 简单说,它有三个特征: 状态总数(state)是有限的。 任一时刻,只处在一种状态之中。 某种条件下,会从一种状态转变(transition)到另一种状态。 它对JavaScript的意义在于,很多对象可

  • 概述 FSM (有限状态机) 可以mixin到akka Actor中,其概念在Erlang 设计原则中有最好的描述。 一个 FSM 可以描述成一组具有如下形式的关系 : State(S) x Event(E) -> Actions (A), State(S') 这些关系的意思可以这样理解: 如果我们当前处于状态S,发生了E事件,则我们应执行操作A,然后将状态转换为S’。 一个简单的例子 为了演示F

  • 本文向大家介绍Linux有限状态机FSM的理解与实现,包括了Linux有限状态机FSM的理解与实现的使用技巧和注意事项,需要的朋友参考一下 有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。FSM是一种逻辑单元内部的一种高效编程方法,在服务器编程中,服务器可以根据不同状态或者消息类型进行相应的处

  • 本文向大家介绍Vue实现手机计算器,包括了Vue实现手机计算器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue制作仿手机计算器的具体代码,供大家参考,具体内容如下 1.首先是把样式做出来,按钮是0-9,还有加减乘除,百分号,清除按钮,小数点,等号、等等 2.把官方网站的JS插件引用,cn.vuejs.org/v2/guide/ 页面视图 JS 以上就是本文的全部内容,希望对大家

  • 本文向大家介绍C#实现远程关闭计算机或重启计算机的方法,包括了C#实现远程关闭计算机或重启计算机的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现远程关闭计算机或重启计算机的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 每当你阅读一本关于解析的书,都有一个可怕的章节,关于有限状态机(FSM)。他们对“边”和“节点”进行了详细的分析,每个可能的“自动机”的组合被转换成其他自动机,坦率地说,它有点多了。FSM 有一个更简单的解释,使得它们实用并且可理解,而不会违背相同主题的纯理论版本。当然你不会向 ACM 提交论文,因为你不知道 FSM 背后的所有数学知识,但如果你只想在应用程序中使用它们,那么它们就足够简单了。 F

  • 本文向大家介绍C语言实现关机小程序,包括了C语言实现关机小程序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现关机小程序,立即关机和定时关机的具体代码,供大家参考,具体内容如下 之前小编遇到的一个有趣题目,大家都来了解一下 题目要求:用C语言编写一个关机程序 程序分析 系统提示一分钟之后关机,如果输入“我爱你”就注销关机,否则将跳到关机程序,继续提示,如果一分钟之内输入不对