Questão 1

Considere o seguinte programa em Python:
def funcao1(x) : # use o espaço ao lado do código como rascunho para
    if x == 0 : # registrar o valor das variáveis
        y = x + 1
    else :
        y = x - 3
    return y
def funcao2(a, b, c) :
    x = a + b
    y = a - b
    z = c
    print(x, y, z)
#programa principal
x = 3
y = 5
z = 7
y = funcao1(x)
print(x, y, z)
print(x+z, funcao1(x+z))
a = 2
b = 6
c = 4
funcao2(c, b, a)
a = funcao1(a)
funcao2(funcao1\text{(c)}, b, a)
print(x, y, z)
Escreva abaixo na “Tela do Computador” qual será a saída exata fornecida pelo programa:

Tela do Computador

Passo 1

Temos um programa Python com duas funções:
funcao1 recebe um parâmetro x, retorna x+1 se x=0 ou retorna x-3 caso contrário.
funcao2 recebe três parâmetros (a,b,c), calcula localmente
x = a + b,\quad y = a - b,\quad z = c
e imprime esses três valores.
No programa principal, definem-se variáveis globais, fazem chamadas a essas funções e usam vários prints. O objetivo é rastrear (trace) passo a passo para descobrir exatamente o que aparece na “tela do computador”.

Passo 2

Inicialmente, no escopo global, temos
x = 3,\quad y = 5,\quad z = 7.
Em seguida executa-se
y = \text{funcao1}(x).
Como x=3\neq0, dentro de funcao1 calcula-se y = 3 - 3 = 0 e retorna esse valor. Logo, globalmente y passa a valer 0 (enquanto x e z continuam 3 e 7).

Passo 3

A instrução
\text{print}(x,y,z)
usa os valores atuais de x, y e z no escopo global. Portanto imprime:
3 0 7

Passo 4

A seguir, executa-se
\text{print}\bigl(x+z,\;\text{funcao1}(x+z)\bigr).
Calcula-se x+z = 3 + 7 = 10. Depois, \text{funcao1}(10) retorna 10 - 3 = 7. Logo esse print produz:
10 7

Passo 5

Agora definem-se novas variáveis no escopo global:
a = 2,\quad b = 6,\quad c = 4.
Chama-se
\text{funcao2}(c,b,a), ou seja \text{funcao2}(4,6,2).
Dentro de funcao2 temos
x_{\text{local}} = 4 + 6 = 10,\quad y_{\text{local}} = 4 - 6 = -2,\quad z_{\text{local}} = 2,
e então imprime
10 -2 2

Passo 6

Em seguida, faz-se
a = \text{funcao1}(a),
isto é \text{funcao1}(2), que retorna 2 - 3 = -1. Então a vira -1.
Depois chama-se
\text{funcao2}(\text{funcao1}\text{(c)},\,b,\,a).
Como c=4, \text{funcao1}(4)=4-3=1. Então é \text{funcao2}(1,6,-1).
Dentro de funcao2:
x_{\text{local}} = 1 + 6 = 7,\quad y_{\text{local}} = 1 - 6 = -5,\quad z_{\text{local}} = -1,
imprime
7 -5 -1

Passo 7

Por fim, executa-se novamente
\text{print}(x,y,z)
no escopo global. Esses valores não mudaram desde o Passo 3:
x = 3,\quad y = 0,\quad z = 7,
logo imprime
3 0 7

Resposta

3 0 7
10 7
10 -2 2
7 -5 -1
3 0 7

Exercícios relacionados