es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cuál es la salida cuando se utiliza enlace superficial?

x : entero := 3 //ámbito global
y : entero := 4 //ámbito global
procedimiento agregar
x := x + y
procedimiento segundo(P : procedimiento)
x : entero := 5
P()
procedimiento primero
y : entero := 6
segundo(agregar)
primero() //primera llamada de procedimiento en la función principal
escribir entero(x) //función para imprimir el valor de una variable

Después de que se ejecute primero(), ¿add() modifica second::x, no ::x, verdad? Entonces, la salida es 3…
pero la respuesta dada es: Alcance dinámico (ligadura superficial): (x=5+y=6)=11

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La respuesta dada es correcta. El código utiliza ámbito dinámico con enlace superficial.

    Cuando se llama a first (), crea una nueva variable local y con un valor de 6. Luego llama a second () con add () como argumento.

    Dentro de second (), se crea una nueva variable local x con un valor de 5. Luego llama al procedimiento pasado como argumento, que es add ().

    Ya que add() no tiene una variable local x, busca una variable con ese nombre en el ámbito desde donde se llamó, que es second(). Encuentra second::x, que tiene un valor de 5. Agrega y (que es la variable global con un valor de 4) a ese valor y asigna el resultado (9) a second::x.

    Finalmente, cuando el programa imprime el valor de x, busca una variable con ese nombre en el ámbito global y encuentra la variable global x, que todavía tiene un valor de 3.

    Por lo tanto, la salida es 11, no 3.

Comments are closed.