Linguagens de Programação - Atividade 06

Leia com atenção as instruções abaixo.

Formato da Entrega:

Valor: 2,0 pontos na 2ª Nota.

Data da Entrega Limite: 01/10/2020

Questão 01 - 0,5 Ponto

Escreva uma sentença de atribuição simples com um operador aritmético em alguma linguagem que você conheça. Para cada componente da sentença, liste as vinculações necessárias para determinar a semântica quando a sentença é executada. Para cada vinculação, indique o tempo de vinculação usado para a linguagem.

Questão 02 - 0,5 Ponto

A questão utiliza a linguagem Ada, mas entender essa linguagem não é crucial para resolver a questão. Tudo que você precisa saber é que Ada permite a definição de procedimentos aninhados. Considere o seguinte esqueleto de programa em Ada:

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

Questão 03 - 0,5 Ponto

Considere o programa em C:

void fun(void) {
    int a, b, c; /* definição 1 */
    ...
    while (...) {
        int b, c, d; /*definition 2 */
        ... <-------------- 1
        while (...) {
            int c, d, e; /* definition 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.

Questão 04 - 0,5 Ponto

Considere o seguinte esqueleto de programa em C:

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.