Pular para o conteúdo principal

Questão de Programação — Conceitos básicos de programação — VUNESP 2023

ProgramaçãoConceitos básicos de programação
Código
vu073342
Banca
VUNESP
Órgão
DPE-SP
Ano
2023
Nível
Superior
Cargo
Agente de Defensoria - Analista Desenvolvedor
Considere o seguinte programa escrito na linguagem PHP.Imagem associada para resolução da questãoPode-se afirmar corretamente que o valor impresso correspondente à variável $z será:
  1. A0
  2. B1
  3. C2
  4. D3
  5. E4
Revelar gabarito e comentário

GabaritoC — 2

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Resolução

Gabarito: letra C — a conta chega a O valor impresso é 2, alternativa C..

A ideia por trás

Em PHP, os operadores ++ e -- aumentam ou diminuem uma variável em 1. A diferença crucial está na posição: quando o operador vem antes da variável (pré-fixado, como ++$z), a variável é modificada primeiro e depois o novo valor é usado; quando vem depois (pós-fixado, como $z++), o valor atual é usado primeiro e só então a variável é modificada. Essa distinção afeta o resultado de expressões que usam o valor retornado.

A regra é: ++$z equivale a 'incremente $z e retorne o novo valor', enquanto $z++ equivale a 'retorne o valor atual e depois incremente'. O mesmo vale para --. Em uma expressão como $z = z+++++z++ + ++z, a ordem de avaliação é da esquerda para a direita: primeiro $z++ retorna o valor atual (0) e incrementa zpara1;depois++z para 1; depois ++z incrementa $z para 2 e retorna 2. A soma 0 + 2 = 2 é atribuída a $z. Essa é a pegadinha clássica: muitos esquecem que o pós-fixado usa o valor antigo.

Esta questão testa exatamente essa diferença entre pré e pós-fixado em uma expressão que combina os dois. O código provável é $z = z+++++z++ + ++z; e precisamos acompanhar o valor de $z passo a passo.

O que a questão dá

  • código PHP com operadores de incremento e decremento

  • variável $z inicializada com 0

  • gabarito: letra C (valor 2)

O que queremos: o valor impresso pela variável $z

Passo 1 — Inicializar a variável

Todo programa começa com um valor inicial; aqui $z começa em 0. Esse é o ponto de partida para todas as operações seguintes.

$z = 0
NÃO CAIA NESSA!

Esquecer que o valor inicial é 0 e começar a contar de outro número.

Passo 2 — Avaliar o primeiro operando da soma

Na expressão $z = z+++++z++ + ++z, a soma é avaliada da esquerda para a direita. O primeiro operando é $z++, que é pós-fixado: ele retorna o valor atual de $z (0) e só depois incrementa $z para 1. Precisamos guardar esse valor retornado para a soma.

Por que esta fórmula: A regra do pós-fixado: o valor é usado antes da modificação.

valor_retornado_1 = $z (antes)

De onde vem cada valor: $zz = passo 1: 0

valor_retornado_1 = 0 = 0\ (e $z passa a ser 1)
NÃO CAIA NESSA!

Achar que $z++ já retorna 1; na verdade retorna 0 e depois incrementa.

Passo 3 — Avaliar o segundo operando da soma

Depois do primeiro operando, zjaˊvale1.Agoraavaliamos++z já vale 1. Agora avaliamos ++z, que é pré-fixado: ele incrementa $z primeiro (de 1 para 2) e retorna o novo valor, 2.

Por que esta fórmula: A regra do pré-fixado: a variável é modificada antes de retornar o valor.

valor_retornado_2 = $z (depois de incrementar)

De onde vem cada valor: $zz = passo 2: $z ficou 1

valorretornado2=2valor_retornado_2 = 2

valorretornado2valor_retornado_2 = 2 (e $z agora vale 2)

NÃO CAIA NESSA!

Usar o valor antigo de $z (1) em vez do novo (2) para o pré-fixado.

Passo 4 — Somar os valores retornados

Agora temos os dois valores que a expressão z+++++z++ + ++z realmente usa: 0 e 2. A soma é feita com esses valores, não com o estado atual de $z.

Por que esta fórmula: A soma é a operação aritmética pedida na expressão.

soma=valorretornado1+valorretornado2soma = valor_retornado_1 + valor_retornado_2

De onde vem cada valor: valorretornado1valor_retornado_1 = passo 2: 0 · valorretornado2valor_retornado_2 = passo 3: 2

soma=0+2=2soma = 0 + 2 = \boxed{2}
NÃO CAIA NESSA!

Somar os valores atuais de $z (1 e 2) em vez dos retornados (0 e 2).

Passo 5 — Atribuir o resultado à variável

O sinal de = na expressão $z = ... atribui o resultado da soma à variável $z. Como a soma deu 2, $z passa a valer 2, sobrescrevendo o valor anterior.

Por que esta fórmula: A atribuição é o que define o novo valor da variável.

$z = soma

De onde vem cada valor: somasoma = passo 4: 2

$z = 2
$z = 2
NÃO CAIA NESSA!

Confundir o valor retornado com o valor final da variável; aqui o valor final é a soma.

Resposta: O valor impresso é 2, alternativa C.

Link permanente: /questoes/vu073342