Statique (Lexicale) Délimitation vs Dynamique de Portée (Pseudo-code)

Program A()
{
    x, y, z: integer;

    procedure B()
    {
        y: integer;
        y=0;
        x=z+1;
        z=y+2;
    }

    procedure C()
    {
        z: integer;

        procedure D()
        {
            x: integer;
            x = z + 1;
            y = x + 1;
            call B();
        }

        z = 5;
        call D();
    }

    x = 10;
    y = 11;
    z = 12;
    call C();
    print x, y, z;
}

À partir de ma compréhension, le résultat de ce programme lors de l'exécution à l'aide de statique portée est: x=13, y=7 et z=2.

Toutefois, lorsqu'il est exécuté à l'aide de dynamique de portée, le résultat est: x=10, y=7 et z=12.

Ces résultats sont ceux que notre professeur nous a donné. Cependant, je ne comprends pas pour la vie de moi, comment il a atteint ces résultats. Quelqu'un pourrait éventuellement marcher à travers le pseudocode et d'expliquer leurs valeurs dans les deux différents types de champs?

  • Quelle est la signification exacte de ces z: integer; dans votre pseudo? Si ils définissent une nouvelle variable, ils ont déterminé la valeur par défaut?
  • Il serait équivalent à int z;
  • Aussi loin que je peux voir aucune des variables sont accessibles à l'avant ils sont initialisés.
  • i.imgur.com/f6wT7pB.png Pas sûr si ça va aider, il a été inclus dans la solution.
  • Vous avez raison, j'ai mal lu le code.
  • Quelle langue est-ce la question?
  • double possible de Ce qui est portée lexicale?

InformationsquelleAutor petrov | 2014-03-14