2013-01-23 69 views
0

我是Mathematica的新手,看來我在Mathematica語法中缺少一些東西。我想將C代碼轉換爲Mathematica代碼,我做錯了什麼?

我在下面複製了兩個代碼。

列印[第二]必須返回120,用於本實施例中,但它始終是0。

任何建議表示讚賞。

C:

int row = 4; 
    int column = 10; 
    int passenger = 5; 
    int luggage = 20; 
    int arrival = 15; 
    int walking = 5; 

    int second = 0; 
    int waitingtime = 0; 
    int _yolcu = 0; 

     for (int i = 0; i <row; i++) 
     { 
      waitingtime = 0; 
      if (_yolcu == passenger) 
       break; 
      for (int j = 0; j < column; j++) 
      { 
       if (_yolcu == passenger) 
        break; 
       _yolcu++; 
       if (i == 0 && j == 0){ 
        second = second + luggage; 
        continue; 
         } 

       else 
         { 
        waitingtime = 0; 
        waitingtime =second-(j * walking + arrival * (_yolcu - 1)); 
        if (waitingtime>= 0) 
        { 
         second = second + walking + luggage; 
        } 
        else   
         second = second - waitingtime+luggage; 
       } 

      } 
     } 

數學:

 row = 4; 
     column = 10; 
     passenger = 5; 
     luggage = 20; 
     arrival = 15; 
     walking = 5; 

     second = 0; 
     waitingtime = 0; 
     _yolcu = 0; 

     For[i = 0, i < row, i++, waitingtime = 0; 
     If[_yolcu == passenger, Break[], 
      For[j = 0, j < column, j++, 
      If[_yolcu == passenger, Break[], _yolcu++; 
      If[i == 0 && j == 0, second = second + luggage, 
      waitingtime = second - (j*walking + arrival*(_yolcu - 1)); 
      If[waitingtime >= 0, second = second + walking + luggage, 
       second = second - waitingtime + luggage]]]]]] 

     Print[second] 

回答

2

_yolcu

是不是一個有效的Mathematica符號名稱,以便表達_yolcu = 5不引起的Mathematica到把一個變量叫做_yolcu與值5放入上下文符號表中。嘗試交互執行語句,然後再次嘗試執行_yolcu; Mathematica將(或者對我而言)返回_yolcu而不是5

事實上_yolcu圖案Headyolcu匹配的東西。通常,任何以下劃線開頭的表達式都是一種模式;下劃線在Mathematica符號的名稱中無效。諸如_yolcu++之類的表達式不會增加_yolcu的值。我實際上並不知道它的作用,除了執行語句時產生錯誤;也許你的代碼實際上並沒有碰到它。

如果您還不瞭解Mathematica模式,我建議您閱讀文檔。

而且,在我寫作時,你所做的與將C代碼翻譯成Mathematica看起來有細微差別,它看起來更像是將C代碼翻譯成'C-written-in-Mathematica'。我認爲你的時間會更好地花費在將C語言逆向工程化爲一個問題規範,然後編寫一個Mathematica解決方案來解決這個問題。我認爲這是你的基本錯誤,對下劃線的混淆只是對Mathematica的語法不熟悉。

+0

非常感謝,該下劃線導致我的問題。 – Burak

0

很高興您能夠正常工作,但是參考HPMark的最後一段,Mathematica中迭代循環的性能很糟糕。爲了編寫好的Mathemaitca表達式,您需要考慮以實現相同目的的方式應用函數列表。有點像列表是一個un-roll Do循環,迭代實際上是通過遍歷這個列表來實現的。