国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++有限狀態機實現計算器小程序

2020-01-26 14:05:29
字體:
來源:轉載
供稿:網友

本文介紹利用有限狀態機原理開發計算器小程序的過程。

實現的功能

  • 支持整數、小數輸入
  • 支持+ - * / 四則運算
  • 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);}

運行效果展示

源碼查看

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 马关县| 屏东市| 临安市| 汉寿县| 五寨县| 双峰县| 北宁市| 遂溪县| 日照市| 阜南县| 砀山县| 鄂伦春自治旗| 常山县| 太保市| 汪清县| 宜兰县| 鄯善县| 饶平县| 江永县| 永嘉县| 陆良县| 泰兴市| 拜城县| 云和县| 新干县| 新宾| 巴林左旗| 阿克陶县| 微山县| 遵义市| 陕西省| 武乡县| 连平县| 清河县| 获嘉县| 五台县| 方城县| 重庆市| 英吉沙县| 虎林市| 泰安市|