Alcance dinámico / estático con encuadernación profunda / superficial (ejercicios)

Estoy estudiando el alcance dinámico / estático con enlace profundo / superficial y ejecutando código manualmente para ver cómo funcionan realmente estos diferentes ámbitos / enlaces. Leí la teoría y busqué en Google algunos ejercicios de ejemplo y los que encontré son muy simples (comoéste que fue muy útil con el alcance dinámico) Pero tengo problemas para entender cómo funciona el alcance estático.

Aquí publico un ejercicio que hice para verificar si obtuve la solución correcta:

considerando el siguiente programa escrito en pseudocódigo:

int u = 42; 
int v = 69;
int w = 17;
proc add( z:int )
  u := v + u + z
proc bar( fun:proc )
  int u := w;
  fun(v)
proc foo( x:int, w:int )
  int v := x;
  bar(add)
main
  foo(u,13)
  print(u)
end;

Lo que se imprime en la pantalla

a) utilizando un alcance estático? respuesta = 180

b) utilizando un alcance dinámico y un enlace profundo? respuesta = 69 (suma para u = 126 pero es v local de foo, ¿verdad?)

c) utilizando un alcance dinámico y un enlace superficial? respuesta = 69 (suma para u = 101 pero es v local de foo, ¿verdad?)

PD: Estoy tratando de practicar algunos ejercicios como este si sabes dónde puedo encontrar este tipo de problemas (preferiblemente con soluciones), por favor dame el enlace, ¡gracias!

Respuestas a la pregunta(3)

Su respuesta a la pregunta