DESAFIO 16

O que faz o programa abaixo? Explique. Por que foi necessário usar a variável aux?
n1 = int(input("Digite primeiro número: '))
n2 = int(input('Digite segundo número: "))
print('Inicialmente primeiro = ',n1,' e segundo = ',n2)
aux = n1
n1 = n2
n2 = aux
print('Após o processamento primeiro = ',n1,' e segundo = ',n2)

Passo 1

O enunciado pergunta duas coisas: (1) “O que faz o programa abaixo? Explique.” e (2) “Por que foi necessário usar a variável aux?”. O enunciado fornece o trecho de programa (em Python) que lê dois números, imprime os valores, faz atribuições envolvendo uma variável chamada \text{aux} e imprime novamente. As informações relevantes que temos são: os identificadores \text{n1}, \text{n2} e \text{aux}; as operações de leitura com \text{int(input(...))}; duas impressões com \text{print(...)}; e as atribuições
\text{aux = n1}, \text{n1 = n2}, \text{n2 = aux}.

Passo 2

Vou explicar linha a linha (corrigindo um detalhe de sintaxe óbvio): os delimitadores de string devem casar (aspas iguais no início e no fim). Interpretando o código da forma correta e linha a linha, temos:
  • A instrução \text{n1 = int(input("Digite primeiro número: "))}ú pede ao usuário que digite um número, lê a entrada como texto, converte para inteiro com \text{int(...)} e guarda o resultado na variável \text{n1}.
    • Explicação curta sobre \text{int(...)}: converte uma string que representa um número inteiro para o tipo inteiro; se a entrada não for um número inteiro válido, dá erro.
  • A instrução \text{n2 = int(input("Digite segundo número: "))}ú faz o mesmo para a variável \text{n2}.
  • A instrução \text{print('Inicialmente primeiro = ', n1, ' e segundo = ', n2)} mostra na tela os valores atuais de \text{n1} e \text{n2}.
  • A instrução \text{aux = n1} copia o valor atual de \text{n1} para a variável temporária \text{aux}.
  • A instrução \text{n1 = n2} atribui a \text{n1} o valor que estava em \text{n2}.
  • A instrução \text{n2 = aux} atribui a \text{n2} o valor que estava guardado em \text{aux} (ou seja, o valor inicial de \text{n1}).
  • A instrução \text{print('Após o processamento primeiro = ', n1, ' e segundo = ', n2)}ó mostra os novos valores de \text{n1} e \text{n2}.

Passo 3

Vou mostrar um rastreamento (trace) do programa com números concretos para você ver claramente o que acontece. Escolhemos, por exemplo, \text{n1} = 3 e \text{n2} = 5.
  • Depois das leituras: \text{n1} = 3, \text{n2} = 5.
  • Ao executar \text{aux = n1}: \text{aux} = 3 (agora \text{aux} guarda o valor original de \text{n1}).
  • Ao executar \text{n1 = n2}: \text{n1} = 5 (agora \text{n1} recebeu o valor que estava em \text{n2}).
  • Ao executar \text{n2 = aux}: \text{n2} = 3 (agora \text{n2} recebeu o valor guardado em \text{aux}, que era o \text{n1} original).
  • Resultado final: \text{n1} = 5, \text{n2} = 3. Ou seja, os valores foram trocados entre as duas variáveis.

Passo 4

Agora explico didaticamente por que a variável \text{aux} é necessária. O problema ao trocar valores entre duas variáveis é que uma atribuição sobrescreve um valor que pode ser necessário depois. Se tentarmos fazer só:
  • \text{n1 = n2}
  • \text{n2 = n1}
    com a mesma ordem, ocorre perda de informação. Usando o mesmo exemplo inicial ( \text{n1}=3, \text{n2}=5):
  • Após \text{n1 = n2} teríamos \text{n1} = 5 e \text{n2} = 5 — o valor original \text{n1} = 3 foi perdido.
  • Depois \text{n2 = n1} só copiará \text{5} novamente, resultando em \text{n1}=5, \text{n2}=5. Ou seja, não houve troca correta.
    A função de \text{aux} é guardar temporariamente o valor de \text{n1} antes de sobrescrevê-lo, permitindo que depois atribuamos esse valor a \text{n2}. Em palavras simples: \text{aux} salva o valor que iríamos perder.

Passo 5

Alternativas ao uso de \text{aux} (úteis para prova ou prática):
  • Em Python existe uma forma direta e mais compacta:
    • \text{n1, n2 = n2, n1}
      que faz a troca em uma única linha sem variável auxiliar explícita (através de empacotamento/desempacotamento de tupla).
  • Método aritmético (quando as variáveis são numéricas e há cuidado com overflow):
    • \text{n1 = n1 + n2}
    • \text{n2 = n1 - n2}
    • \text{n1 = n1 - n2}
      Isso também troca os valores sem variável extra, mas exige que as operações sejam seguras (por exemplo, evitar estouro de inteiro).
  • Em prova: se o enunciado ou a linguagem não permite atribuição múltipla ou truques aritméticos, use sempre a variável auxiliar — é simples, claro e correto.

Passo 6

Dicas finais para você na prova (pra te animar):
  • Quando pedir “o que faz”, descreva a ação em palavras claras: "troca os valores de \text{n1} e \text{n2}" e explique que primeiro salva-se o valor de \text{n1} em \text{aux} para não perdê-lo.
  • Se tiver tempo e souber Python, mencione a alternativa \text{n1, n2 = n2, n1} como solução idiomática.
  • Respira fundo: entender o porquê do \text{aux} é a parte conceitual importante — o resto é só seguir as atribuições com calma.

Resposta

Troca os valores de \text{n1} e \text{n2} (lê dois inteiros, mostra os valores iniciais, inverte-os e mostra o resultado).
A variável \text{aux} é necessária para guardar temporariamente o valor original de \text{n1} antes de sobrescrevê‑lo, evitando a perda desse valor durante a troca.

Exercícios relacionados