2014-01-23 66 views
1

我有一大堆的數學函數以這種格式是從程序輸出:格式的數學函數

(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200 

我需要編寫一個腳本,將它們轉換成便於閱讀的格式是這樣的:

(704253724578.0182000000000000 * (((sqrt(X13-X11)/(X18/X15)) /((((X1*X20)/X19)^2) * X2))/ (((X1 * X20) * (X25/X15))/X9))) + 77.2424201451314200 

有關在java中執行此操作的最佳方式的任何想法?還有沒有其他更好的工具來做到這一點,除了Java?

謝謝!

+1

這看起來像是一個術語代數,用於插入符號問題,它是獨立於語言的。 –

+0

使用權力/指數時,不要使用'^'字符,它不會做你認爲它的作用。如果你需要'x'提高到'2'的強度(例如'x^2'),你應該使用'Math.pow(x,2)'。 '^'操作符實際上是一個[「按位異或」](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)。 –

+0

對......我其實不是在試圖做數學。我只是簡單地試圖格式化字符串從前綴符號到中綴符號。有關如何格式化字符串的任何想法?謝謝! –

回答

0

安裝Ruby和一個名爲「sexpistol」的好寶石,它允許你處理s表達式。

我砍死一個解決方案爲您提供:

require 'sexpistol' 
require 'pp' 

exp="(704253724578.0182000000000000 .* (mydivide (mydivide (mydivide (mysqrt (- X13 X11)) (mydivide X18 X15)) (* (square (mydivide (* X1 X20) X19)) X2)) (mydivide (* (* X1 X20) (mydivide X25 X15)) X9))) + 77.2424201451314200" 

parser = Sexpistol.new 
tree= parser.parse_string(exp) 

SYM={ 
    :".*" => :*, 
    :* => :*, 
    :"+" => :"+", 
    :- => :-, 
    :mydivide => :/, 
    :square => "^2", 
    :mysqrt => "mysqrt" 
    } 

def isPrefix sexp 
    return true if SYM[sexp.first] 
    return false  
end 

def p2i sexp 
    if sexp.is_a? Array 
     if isPrefix(sexp) 
      op,lhs,rhs =sexp 
      case op 
      when :square 
       return [p2i(lhs),SYM[op]] 
      when :mysqrt 
       return [:mysqrt,p2i(lhs)] 
      else 
       return [p2i(lhs),SYM[op],p2i(rhs)] 
      end 
     else 
      lhs,op,rhs=sexp 
      return [p2i(lhs),SYM[op],p2i(rhs)] 
     end 
    else 
     return sexp 
    end 
end 

pp parser.to_sexp(p2i(tree)).first 
# prints : (704253724578.0182 * ((((mysqrt (X13 - X11))/(X18/X15))/((((X1 * X20)/X19) ^2) * X2))/(((X1 * X20) * (X25/X15))/X9))) + 77.24242014513142 

如果你寫了一篇論文,你可以承認我!

+0

感謝所有幫助傢伙!我想通過使用堆棧推送和彈出Java中的術語。 –

+0

也許你可以驗證答案(工作解決方案)。謝謝 ! – JCLL