Nesta atividade, vamos tratar de escopo.
Considere o seguinte esqueleto de programa:
procedure Main is
X : Integer;
procedure Sub3; -- Essa é uma declaração de Sub3
-- Ela permite que Sub3 a chame
procedure Sub1 is
X : Integer;
procedure Sub2 is
begin -- de Sub2
...
end; -- de Sub2
begin -- de Sub1
...
end; -- de Sub1
procedure Sub3 is
begin -- de Sub3
...
end; -- de Sub3
begin -- de Main
...
end; -- de Main
Assuma que a execução desse programa é na seguinte ordem de unidades:
Main chama Sub1
Sub1 chama Sub2
Sub2 chama Sub3
Assuma que o seguinte programa foi compilado e executado usando regras de escopo estático. Que valor de X é impresso no procedimento Sub1? Sob re- gras de escopo dinâmico, qual o valor de X impresso no procedimento Sub1?
procedure Main is
X : Integer;
procedure Sub1 is
begin -- de Sub1
Put(X);
end; -- de Sub1
procedure Sub2 is
X : Integer;
begin -- de Sub2
X := 10;
Sub1
end; -- de Sub2
begin -- de Main
X := 5;
Sub2
end; -- de Main
Considere o programa:
procedure Main
is X, Y, Z : Integer;
procedure Sub1 is
A, Y, Z : Integer;
procedure Sub2 is
A, B, Z : Integer;
begin -- de Sub2
...
end; -- de Sub2
begin -- de Sub1
...
end; -- de Sub1
procedure Sub3 is
A, X, W : Integer;
begin -- de Sub3
...
end; -- de Sub3
begin -- de Main
...
end; -- de Main
Liste todas as variáveis, com as unidades de programa onde elas estão declaradas, visíveis nos c orpos de Sub1, Sub2 e Sub3, assumindo que o escopo estático esteja sendo usado.
Considere o programa:
procedure Main is
X, Y, Z : Integer;
procedure Sub1 is
A, Y, Z : Integer;
begin -- de Sub1
...
end; -- de Sub1
procedure Sub2 is
A, X, W : Integer;
procedure Sub3 is
A, B, Z : Integer;
begin -- de Sub3
...
end; -- de Sub3
begin -- de Sub2
...
end; -- de Sub2
begin -- de Main
...
end; -- de Main
Liste todas as variáveis, com as unidades de programa onde elas estão declaradas, visíveis nos corpos de Sub1, Sub2 e Sub3, assumindo que o escopo estático está sendo usado.
Considere o programa:
void fun(void) {
int a, b, c; /* definição 1 */
...
while (...) {
int b, c, d; /* definição 2 */
... <-------------- 1
while (...) {
int c, d, e; /* definição 3 */
... <------------- 2
}
... <-------------- 3
}
... <---------------- 4
}
Para cada um dos quatro pontos marcados nessa função, liste cada variável visí- vel, com o número da sentença de definição que a define.
Considere o seguinte esqueleto de programa:
void fun1(void); /* protótipo */
void fun2(void); /* protótipo */
void fun3(void); /* protótipo */
void main() {
int a, b, c;
...
}
void fun1(void) {
int b, c, d;
...
}
void fun2(void) {
int c, d, e;
...
}
void fun3(void) {
int d, e, f;
...
}
Dada as seguintes sequências de chamadas e assumindo que o escopo dinâmico é usado, que variáveis são visíveis durante a execução da última função chamada? Inclua com cada variável visível o nome da função na qual ela foi definida.