2017-05-08 70 views
-2

我正在與Cea一起學習軟件系統開發A-Level。代碼顯示在下面。標記方案說僞碼是錯誤的,有人能解釋爲什麼嗎?這個僞代碼如何是假的(不輸出43)

僞代碼:

The output from the following pseudo code is 43. 
(method) – void incrementNum(int numParam){ 
numParam++ 
} 
(main method) – void main(){ 
int numArg = 42 
incrementNum(numArg) 
output numArg // writes 43 
} 
+0

請把代碼放到你的問題,鏈接的圖像可能會丟失,並沒有爲其他人編制索引。除此之外,如果你至少在回答問題的人的問題上付出至少的努力,那將是非常棒的。 –

+2

[請不要將您的代碼發佈爲圖片。](// meta.stackoverflow.com/q/285551) –

回答

1

查看功能評估策略,特別是Call by Value。功能incrementNum收到numArg副本numParam,該副本已增加。原始變量未觸及。根據實際的編程語言,你有多個解決方案:

  • 改寫incrementNum使得它返回其參數(見cybermonkey's solution
  • 使用不同的評估策略。例如在C++中,你可以通過引用調用(注意int& VS int在增加的簽名):
#include <iostream> 

void increase(int& v) { 
    v++; 
} 

int main() { 
    int i = 42; 
    increase(i); 
    std::cout << i << std::endl; 

    return 0; 
} 

輸出43

1

沒有與此代碼的一些問題:

  • numParam不是從incrementNum分配,這意味着它 不會影響價值numParam等不會增加數值 到43

  • incrementNum不會返回(因爲它是void - 它應該是int)。

代碼工作如下:

(例如對於C
int incrementNum(int numParam){ 
    return numParam++; 
} 

void main(){ 
    int numArg = 42; 
    numArg = incrementNum(numArg); 
    output numArg; //Writes '43'. 
} 
+1

我認爲它的工作你也必須改變函數返回++ numParam; – DevNewb

+0

@DevNewb由於某種原因,僞代碼是僞代碼;這是粗略的代碼,是語言無關的。 '++ numParam'和'numParam ++'通常被理解爲'給變量加1',這是我故意沒有做好的事情,因爲我不想完整地完成他們的作業。 – cybermonkey

+0

將它改爲'''numParam = numParam +1;返回numParam;'''相應'''返回numParam + 1'''然後?對於這樣的初學者問題,這個級別的細節應該進入僞代碼。 –

0

incrementNum不返回到numArg和參數的方法的值不是通過引用傳遞)。所以在方法調用之後,numArg的值仍然是42。