#42004: 前序運算式求值


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 不指定學校
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2024-11-09 20:16:56
f640. 函數運算式求值 -- APCS201902程式實作題3 | From: [123.192.228.253] | 發表日期 : 2024-09-18 05:16

做這題前先確保你知道以下概念:

  1. 堆疊 stack
  2. 中序、前序、後序運算式

 

這題其實就是在處理前序運算式

回想一下前序運算式長怎樣? 怎麼做? 想不起來就想一下後序運算式你是怎麼做的

在後序運算式中......

  • 你會由左至右讀取資料
  • 檢查讀到的資料內容,如果是數字就先入棧
  • 如果是運算子就先確認運算子是什麼,決定要用什麼方式計算
  • 決定好後依序從棧頂把數字取出來計算

在前序運算式中......

  • 你會由右至左讀取資料
  • 檢查讀到的資料內容,如果是數字就先入棧
  • 如果是運算子就先確認運算子是什麼,決定要用什麼方式計算
  • 決定好後依序從棧頂把數字取出來計算

判斷運算子其實就相當於在判斷你要使用什麼函式進行計算,像這樣,我用 python 表示

 

我有罪,我使用中文變量名,在 python 能正常執行,主要是方便理解,但還是建議沒事別這樣做

那換到這題也是一樣的,讀取時你一樣要判斷要用什麼函式計算,不過這題是升級版的,傳入參數並非像加減乘除那樣,都固定傳 2 個數字進去

如果你會前序運算式的算法了,那這題就只需要解決不同函式需要傳入不同數量的參數的問題而已

 

總結:

對於前序運算式的處理方式,我知道的有兩種

  • 建立一個 stack,從右往左讀取
  • 使用遞迴,從左至右讀取

這邊已經簡單提 stack 的作法,遞迴就自己想吧(真的想不到再點:python 解) 

 

另外,python 的 eval() 被禁了,所以用python的別考慮它
似乎是偵測文字內容?發現有eval就禁?
我原本使用 eval_expr 作為我的函數名,被說禁止使用eval (我真的沒有用到它啦QQ)

 

 
ZeroJudge Forum