Вопрос о задаче статического и динамического определения объема - PullRequest
0 голосов
/ 02 апреля 2011

Можете ли вы подтвердить мой ответ для следующего кода:

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
    

Это правильно?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2011

Если Pascal поддерживает динамическое масштабирование, то ваш анализ будет верным, насколько это возможно.Переменная z, объявленная в sub1, будет shadow той, которая объявлена ​​в main, даже в sub2.Но x, объявленный в sub2, не повлияет на значение x, объявленное в sub1, поэтому sub1 все еще использует исходное значение 6, когда оно читает x после вызова sub2.

Хотя ваш анализ неполон.Каждый раз должно быть напечатано три значения, а не только два.Третье напечатанное значение должно быть 8 в обоих случаях.

0 голосов
/ 05 апреля 2011

Я понятия не имею, что означает статический против динамического.Паскаль всегда использует переменную во внутренней области видимости.Если вы используете это, то результат 8,27.Я не знаю, как вы пришли к другому результату (все глобальное?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...