回覆列表
  • 1 # 豐富扎蘭屯2y

    1 引言 在日常生活中,經常會用到計算器,微軟自帶的計算器,需要一步一步的計算,運算效率低下,並且不能儲存變數。Matlab面世之後,即使是很小的計算題,我們都寧願使用Matlab,這種草稿紙式的使用方式,給我們帶來極大的方便。但是Matlab軟體是在太大,在效能普通的計算機上,需要很長的啟動時間,影響使用者的使用效率。 本文設計的表示式計算器,則剛好可以解決這一難題,可以完成基本的表示式的計算,保證和Matlab相容的輸入方式,增加對大資料和自定義運算子的支援,並且軟體比較小,啟動快,使用方便。 2 表示式分析 表示式可以分為運算元和運算子兩大類。 運算子按功能分為常用運算子、函式、使用者自定義運算子,括號,按運算元個數又分為單目運算子和雙目運算子。其中單目運算子又分為左運算子和右運算子。 運算元按功能分為數字、常量、使用者自定義變數,按資料型別分為通用資料型別和使用者自定義資料型別。 在本程式中,由於要求進行大數值的計算,因此這裡自定義大數值類BigDouble型別,保持程式的穩定性和執行效率,正常情況下使用double型別進行計算,只有在double無法表示時才使用BigDouble型別。 基於以上認識,將表示式中可能出現的基本元素分為14種類型,用一個列舉型別來表示。其中表達式結尾符(分號)本應歸類到運算子中,為了使用方便,自己作為一類。變數賦值時,變數可能第一次出現,並沒有值,歸為Undefine(未定義)一類。常用函式中只有pow是二元操作函式,不再單列出一類,只在計算時單獨處理。 enum KindType{ OperandDouble, OperandBigDouble, ConstVariable, VariableDouble, VariableBigDouble, Undefine, UnayOprator, BinOperator, UserDefineUnayOprator, UserDefineBinOprator, LeftParen, RightParen, Function, EndExpression, }; 3 總體方案 3.1 分步計算 第一種方案的設計思路是將使用者自定義運算子、變數、函式、括號、四則運算表示式分步處理,每次只處理一種型別並將計算結果替換成字串,然後進行下一型別的處理,直至數學表示式處理結束,輸出結果。思路簡單,但是需要多次掃描字串進行解碼,運算效率低下。收起

  • 中秋節和大豐收的關聯?
  • 麥田穀語成年人該懂的6個處事技巧?