Questão nº 31
Questão de Tecnologia da Informação · FCC TRF4 2019 (nº 31)
Considere o programa em pseudocódigo abaixo, que não apresenta erros.
```
var var1=1, var2=2: inteiro
funcao1()
inicio
var var1=100, var2=100: inteiro
imprima("Variaveis dentro da funcao1(): var1= ", var1, " var2=", var2)
fim
funcao2()
inicio
var1 = var1 +1;
var2 = var2 +2;
imprima("Variaveis dentro da funcao2(): var1= ", var1, " var2=", var2)
fim
inicio
imprima("Variaveis antes de chamar a funcao1(): var1= ", var1, " var2=", var2)
funcao1()
imprima("Variaveis depois de chamar a funcao1():var1= ", var1, " var2=", var2)
funcao2()
imprima("Variaveis depois de chamar a funcao2():var1= ", var1, " var2=", var2)
fim
```
O pseudocódigo, ao ser executado, imprimirá
- AVariaveis antes de chamar a funcao1(): var1=0 var2=0
- BVariaveis dentro da funcao1(): var1=1 var2=2
- CVariaveis dentro da funcao2(): var1=101 var2=102
- DVariaveis depois de chamar a funcao1(): var1=1 var2=2 (alternativa correta)
- EVariaveis depois de chamar a funcao2(): var1=101 var2=102
Resposta comentada
Gabarito Alternativa D
O escopo de variáveis define a área do código onde uma variável existe e pode ser acessada. Variáveis declaradas no início do programa são globais e podem ser vistas e alteradas por qualquer parte do código; já as declaradas dentro de uma função são locais a ela, existem apenas enquanto a função executa e não afetam variáveis globais com o mesmo nome.
(A) Incorreta: A primeira linha do programa `var var1=1, var2=2: inteiro` inicializa as variáveis globais `var1` e `var2` com 1 e 2, respectivamente. Portanto, antes de qualquer chamada de função, elas valem 1 e 2, não 0 e 0.
(B) Incorreta: Dentro da `funcao1()`, são declaradas novas variáveis locais `var1=100` e `var2=100`. A função imprime os valores dessas variáveis locais, que são 100 e 100, não 1 e 2.
(C) Incorreta: A `funcao2()` não declara variáveis locais, então ela opera sobre as variáveis globais. Antes de `funcao2()` ser chamada, as variáveis globais `var1` e `var2` ainda valem 1 e 2 (pois `funcao1()` usou variáveis locais e não as alterou). Assim, `var1` se torna `1+1=2` e `var2` se torna `2+2=4`. A função imprimiria `var1=2 var2=4`. A armadilha aqui é confundir o escopo, imaginando que `funcao1()` alterou as variáveis globas para 100 e 100, o que não ocorreu.
(D) Correta: Após a `funcao1()` ser executada, as variáveis globais `var1` e `var2` permanecem com seus valores originais (1 e 2, respectivamente). Isso acontece porque a `funcao1()` declarou e utilizou suas próprias variáveis locais com os mesmos nomes, que são independentes das globais e são destruídas ao final da função, sem impactar as variáveis globais.
(E) Incorreta: Conforme explicado em (C), após a `funcao2()` ser chamada, as variáveis globais `var1` e `var2` terão seus valores alterados para 2 e 4, respectivamente.
Fonte: FCC TRF4 2019 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.