2013-01-23 49 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循环,迭代实际上是通过遍历这个列表来实现的。

相关问题