2011-04-02 89 views
0

你能確定我對下面的代碼答案:問題關於靜態和動態範圍界定問題

procedure main 
var x,y,z; 

    procedure sub1 
     begin 
     var x,z 
     x := 6; 
     z := 7; 
     sub2(); 
     x := y*z + x; 
     print(x);  
     end 
    procedure sub2 
     begin 
     var x,y 
     x := 1; 
     y := x+z+2; 
     print(y);  
     end 
begin 
    x := 1; y:=3; z:=5; 
    sub1(); 
    sub2(); 
end 

我:

  • 靜:

    8 
    27 
    
  • 動態:

    10 
    27 
    

這是正確的嗎?

+0

程序拒絕在此編譯。 Var塊在begin ..end內? sub2被稱爲聲明?做sub1();也不適合pascal,儘管大多數編譯器會接受它,但你的老師可能不會。什麼是print()? – 2011-04-02 15:38:17

+0

上面的代碼不是有效的Pascal。當然你寫錯了。 – 2011-04-02 18:11:16

+0

我同意關於使用錯誤的語法結構的意見,但我認爲這個問題本質上比理論更實際。這個例子很明顯,雖然在語法上是不正確的(但是,那個頭上可能有某種免責聲明)。 – 2011-04-03 20:32:31

回答

-1

我不知道什麼靜態與動態的意思。帕斯卡總是在最內層的範圍內使用變量。如果你使用它,那麼8,27就是結果。我不知道你是怎麼來到其他結果(一切全球?)

0

如果帕斯卡爾支持動態作用域,那麼你的分析是正確的,只要它去。在sub1中聲明的變量z影子main中聲明的變量,即使在sub2內也是如此。但在sub2宣佈x不會影響sub1宣佈x的價值,所以sub1仍然使用原來的值6時,它調用sub2後讀取x

雖然您的分析不完整。應該有三個值每次打印,而不只是兩個。在這兩種情況下,打印的第三個值應爲8。